Sonst baumeln

Das Problem des baumelnden sonst ( englisch baumelnden , baumelnd ‚) ist ein beispiel für Eine schei nur Mehrdeutigkeit Wacholder Programmiersprache, sterben für Verwirrung Trauer Kann, insbesondere bei falscher Einrückung. In der Regel sind Definitionen, Definitionen, Definitionen, Definitionen, Grammatik der Sprache Das Problem wurde nur in der Programmierung gelöst (Wer C , C ++ , Java ) Auf, Wenn Zwei Schachtelten Wenn-nur ein anderer-Zweig gegenübersteht. Es ist möglich zu treten, wenn eine Option weggelassen wird.

Beispiel (in C )

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

In so einem Beispiel Erwartens einzige Nuss, dass für den Herbst {\ displaystyle a \ neq 1} Diese Variable {\ displaystyle b} der Wert {\ displaystyle 42}Wird zugewiesen. Der Compiler ist für den anderen Zweig zuständig, jedoch nicht für die letzte if-Abfrage. Dieses Programm wird in diesem Fall nicht zuweisung ausführen. Soll dagegen tatsächlich{\ displaystyle b} im Herbst {\ displaystyle a \ neq 1} der Wert {\ displaystyle 42} zugeben, muss die äußere wenn-Anweisung geklammert werden:

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

Andere Programmierreden

In Einigen Sprachen Wird das Problem Umgang, INDEMAR Jedem wenn eine „Schließen Klammer“ zugeordnet Werden Muss . In der Skriptsprache Bourne Shell Steht beispielsweise fi sterben für Schliessen Klemme. Da lachte obige Algorithmus so:

wenn [ $ a -eq 1 ] ; dann
 wenn [ $ b -eq 1 ] ; dann
 a = 42
 fi
sonst
 b = 42
fi

In anderen Programmiersprachen (z. B. Python ) befasst man sich mit dem Problem, das strukturiert ist.

if a == 1 :
 wenn b == 1 :
 a = 42
sonst :
 b = 42

In Ada tris dieses Problems durch eine ultimo syntaktische Klammerung nicht auf. Jedes IF wird durch ENDIF abgeschlossen:

WENN a = 1 DANN
 WENN b = 1 DANN
 a : = 42 ;
 ENDE WENN ;
SONST
 b : = 42 ;
ENDE WENN ;

Auch in Basic wird jedes IF durch END IF abgeschlossen (wer in Ada) oder bei einer solchen Anweisung THEN (ohne Zeilenumbruch) angegeben:

WENN a = 1 DANN WENN b = 1 DANN a = 42 SONST b = 42 ENDE WENN

Siehe auch

  • Look-Ahead

Literatur

  • Guido Krüger: Handbuch der Java-Programmierung . 3. Auflage. Addison Wesley, 2002, ISBN 3-8273-1949-8 , + Kapitel 6.2 Verzicht