Konflikt auflösen

Top  Previous  Next

Beispiele > E-Mail-Adresse > Konflikt auflösen

 

Um den Konflikt aufzulösen, muss word gewissermaßen ausgeklammert werden.

Für phrase ist diese einfach zu machen. Die Regel wird neu definiert als:

 

phrase = word*

 

und alle Stellen, an denen phrase in der Grammatik vorkommt werden ersetzt durch

 

word phrase

 

Die mailbox-Produktion ist gerade die einzige Stelle an der phrase vorkommt; sie wird somit zu:

 

mailbox ::= addr_spez | word phrase route_addr

 

Analog wird mit local_part verfahren. Die Produktion wird umdefiniert zu

 

local_part ::= ("." word)*

 

und alle Stellen, an denen local_part in der Grammatik vorkommt werden ersetzt durch

 

word local_part

 

Damit wird addr_spez zu:

 

addr_spez ::= word local_part "@" domain

 

Schießlich wird word auch aus addr_spez herausgezogen, womit diese Produktion ihre alte Form zurückerhält  (jedoch mit anders definierter Produktion local_part):

 

addr_spez ::= local_part "@" domain

 

Hier muss aufgepasst werden, da addr_spez auch in route_addr verwendet wird. Damit wird letztere zu:

 

route_addr ::= "<" (route)? word addr_spez ">"

 

Und schließlich

 

mailbox ::= word addr_spez | word phrase route_addr

 

Nun kann die Ausklammerung von word vollendet werden:

 

mailbox ::= word ( addr_spez | phrase route_addr )

 

Die Kompilierung der Regel ergibt nun keinen Konflikt mehr.

 

Das so korrigierte Projekt befindet sich in:

 

\TextTransformer\Beispiele\Mailbox\mailbox2.ttp

 

 



Diese Seite gehört zur TextTransformer Dokumentation

Home  Inhalt  English