Konflikt erkennen |
Top Previous Next |
Beispiele > E-Mail-Adresse > Konflikt erkennen
Soweit ging alles ohne Probleme und das Projekt scheint bereits fertig zu sein. Wird nun aber die Startregel mailbox ausgewählt und geparst erscheinen zwei Fehlermeldungen:
mailbox: LL(1) Fehler: "\"" ist Anfänger mehrerer Alternativen mailbox: LL(1) Fehler: "ATOM" ist Anfänger mehrerer Alternativen
Wenn ein derartiger LL(1)-Konflikt vorliegt, kann ein Parser anhand des aktuellen Textes nicht entscheiden, welche Regel er als nächste anwenden soll. Der TextTransformer - im Gegensatz zu einigen anderen verwandten Tools - hilft derartige Fehler zu finden. Ihre Beseitigung erfordert jedoch ein Verständnis der zu entwickelnden Grammatik und einige Kombinationsgabe.
In der mailbox Produktion:
addr_spez | phrase route_addr
beginnen die Alternativen mit addr_spez und phrase. Wenn addr_spez im Navigationsbaum auf der rechten Seite der TextTransformer-Oberfläche ausgewählt wird und dann mit der rechten Maustaste das Popup-Menu aufgerufen wird, kann man sich die Anfängermenge dieser Produktion anzeigen lassen:
Bei der phrase Produktion ergibt sich entsprechend genau die gleiche Anfängermenge. Schaut man sich die Definitionen dieser Produktionen an, ist die Ursache des Konflikt zunächst noch nicht zu erkannen:
addr_spez ::= local_part "@" domain
phrase ::= word+
Steigt man jedoch eine weitere Ebene hinab wird der Konflikt offenbar:
local_part ::= word ("." word)*
word ::= ATOM | quoted_string
Indirect beginnen also sowohl addr_spez als auch phrase mit word. |
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |