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:

 

Email_Firstset_ge

 

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