Dangling else

Dangling else

Das Problem des dangling else (engl. dangling = baumelnd) ist ein Beispiel für eine scheinbare Mehrdeutigkeit einer Programmiersprache, die für Verwirrung sorgen kann, insbesondere bei falscher Einrückung. Tatsächlich ist die Semantik in den meisten Sprachen eindeutig definiert, schon weil die Grammatik der Sprache sonst nicht eindeutig zerlegbar wäre. Das Problem taucht in einigen Programmiersprachen (wie C, C++, Java) auf, wenn zwei verschachtelten if-Anweisungen nur ein else-Zweig gegenübersteht. Es kann nur auftreten, wenn eine optionale Klammerung weggelassen wird.

Inhaltsverzeichnis

Beispiel (in C)

  if (a == 1)
    if (b == 1)
      a = 42;
  else
    b = 42;

In diesem Beispiel erwarten einige Nutzer, dass für den Fall a \neq 1 der Variablen b der Wert 42 zugewiesen wird. Der Compiler bezieht den else-Zweig allerdings auf die letzte if-Abfrage. Das Programm wird in dem Fall keine Zuweisung ausführen. Soll dagegen tatsächlich b im Fall a \neq 1 der Wert 42 zugewiesen werden, muss die äußere if-Anweisung geklammert werden:

  if (a == 1)
  {
    if(b == 1)
      a = 42;
  }
  else
    b = 42;

Andere Programmiersprachen

In einigen Sprachen wird das Problem umgangen, indem jedem if eine „schließende Klammer“ zugeordnet werden muss. In der Skriptsprache Bourne-Shell steht beispielsweise fi für die schließende Klammer. Der obige Algorithmus lautet dann so:

if [ $a -eq 1 ] ; then
  if [ $b -eq 1 ] ; then
    a=42
  fi
else
  b=42
fi

In anderen Programmiersprachen (z.B. Python) umgeht man das Problem, indem man durch Einrücken strukturiert.

if a == 1:
    if b == 1:
        a = 42
else:
    b = 42

In Ada tritt dieses Problem durch eine eindeutige syntaktische Klammerung nicht auf. Jedes IF wird durch ENDIF abgeschlossen:

IF a = 1 THEN
    IF b = 1 THEN
        a := 42;
    END IF;
ELSE
     b := 42;
END IF;

Auch in Basic wird jedes IF entweder durch END IF abgeschlossen (wie in Ada) oder bei einer einzelnen Anweisung diese hinter THEN (ohne Zeilenumbruch) angegeben:

IF a = 1 THEN
    IF b = 1 THEN a = 42
ELSE
     b = 42
END IF

Siehe auch

Quellen

Erläuterung für Visual C# (deutsch)


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Dangling else — The dangling else is a well known problem in computer programming in which a seemingly well defined grammar can become ambiguous. In many programming languages you can write conditionally executed code in two forms: if form: if a then s if else… …   Wikipedia

  • Dangling Else — Das Problem des dangling else (engl. dangling = baumelnd) ist ein Beispiel für eine scheinbare Mehrdeutigkeit einer Programmiersprache, die für Verwirrung sorgen kann, insbesondere bei falscher Einrückung. Tatsächlich ist die Semantik in den… …   Deutsch Wikipedia

  • Dangling-Else-Problem — Das Problem des dangling else (engl. dangling = baumelnd) ist ein Beispiel für eine scheinbare Mehrdeutigkeit einer Programmiersprache, die für Verwirrung sorgen kann, insbesondere bei falscher Einrückung. Tatsächlich ist die Semantik in den… …   Deutsch Wikipedia

  • dangling modifiers —    are one of the more complicated and disagreeable aspects of English usage, but at least they provide some compensation by being frequently amusing. Every authority has a stock of illustrative howlers. Fowler, for instance, gives us Handing me… …   Dictionary of troublesome word

  • Dangeling else — Das Problem des dangling else (engl. dangling = baumelnd) ist ein Beispiel für eine scheinbare Mehrdeutigkeit einer Programmiersprache, die für Verwirrung sorgen kann, insbesondere bei falscher Einrückung. Tatsächlich ist die Semantik in den… …   Deutsch Wikipedia

  • Parsing expression grammar — A parsing expression grammar, or PEG, is a type of analytic formal grammar that describes a formal language in terms of a set of rules for recognizing strings in the language. A parsing expression grammar essentially represents a recursive… …   Wikipedia

  • Java-Syntax — Duke, das Java Maskottchen Die Syntax der Programmiersprache Java ist in der Java Language Specification definiert, ebenso wie die Semantik von Java. Dieser Artikel gibt einen Überblick über die Java Syntax und stellt einige ihrer Besonderheiten… …   Deutsch Wikipedia

  • Ada (programming language) — For other uses of Ada or ADA, see Ada (disambiguation). Ada Paradigm(s) Multi paradigm Appeared in 1980 Designed by MIL STD 1815/Ada 83: Jean Ichbiah Ada 95: Tucker Taft Ada 2005: Tucker Taft Stable release …   Wikipedia

  • ALGOL 58 — Infobox programming language name = ALGOL 58 paradigm = procedural, imperative, structured year = 1958 designer = Friedrich L. Bauer, Hermann Bottenbruch, Heinz Rutishauser, Klaus Samelson, John Backus, Charles Katz, Alan Perlis, Joseph Henry… …   Wikipedia

  • Scannerless parsing — (also called lexerless parsing ) refers to the use of a single formalism to express both the lexical and context free syntax used to parse a language.This parsing strategy is suitable when a clear lexer parser distinction is not required.… …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”