Anfänger und Nachfolger löschbarer Strukturen |
Top Previous Next |
Grammatiktests > Anfänger und Nachfolger löschbarer Strukturen
Die Warnmeldung
LL(1) Warnung: "X" ist Anfänger und Nachfolger löschbarer Strukturen
erscheint, wenn mit dem Terminalsymbol "X" eine löschbare Struktur beginnt und das gleiche Terminalsymbol auf diese Struktur folgen kann. Löschbare Strukturen sind (...)? und (...)*. Ein Beispiel wäre die folgende Regel zur Erkennung einer Zahl, die möglicherweise Nachkommastellen aufweist:
Zahl ::= ( Ziffernfolge "," )? Ziffernfolge // LL(1) Warnung: Ziffernfolge ist Anfänger und Nachfolger löschbarer Strukturen
Trifft nun ein TETRA-Programm auf eine Ziffernfolge, so wird automatisch die löschbare Struktur getestet. Folgt dann kein Komma, wird das Programm mit einer Fehlermeldung abgebrochen. Die Regel sollte daher besser umgekehrt formuliert werden:
Zahl ::= Ziffernfolge ( "," Ziffernfolge )?
Da von der gewählten Startregel abhängt welche Produktionen geparst werden, kann von dieser Wahl auch abhängen, ob ein Token Anfänger und Nachfolger einer löschbaren Struktur ist oder nicht.
Ein Beispiel für diesen Satz erhält man, wenn man das letzte Beispiel weiter ausspinnt. So wäre denkbar, dass die Zahl-Produktion in einer Zahlenpaar-Produktion steht, in der zwei Zahlen durch Kommas getrennt werden sollen. Z.B.:
Zahlenpaar ::= Zahl "," Ziffernfolge
Erneut ist das Komma Anfänger und Nachfolger einer löschbaren Struktur.
Die Erzeugung dieser Warnung kann durch Setzen der entsprechenden Projekt-Option unterdrückt werden.
Ein weiteres Beispiel ist in der Literatur ist als dangling else bekannt. Folgende zwei Regeln verletzen die LL(1)-Bedingung:
Statement ::= IfStatement | ... IfStatement ::= "if" Expression "then" Statement ( "else" Statement )?
Die Anweisung:
if a then if b then c else d
würde TETRA folgendermaßen interpretieren
if a then { if b then c else d }
d.h. TETRA würde den else-Zweig dem if b zuordnen. Logisch betrachtet wäre jedoch folgenden Zuordnung ebenso möglich:
if a then { if b then c } else d
|
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |