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 |