Linksrekursion |
Top Previous Next |
Grammatiktests > Linksrekursion
Ein weiterer möglicher Grammatikfehler ist die Linksrekursion. Die folgende Regel ist das einfachste Beispiel einer Linksrekursion:
a = a | B
Die Prüfung, ob diese Regel auf einen Eingabetext passt führt zu einem unendlichen Regress. Um die Regel a zu testen, muss bevor die Alternative b geprüft werden kann a nochmals getestet werden, usw. Linksrekursionen sind demnach in TETRA nicht zulässig, können aber nicht durch einen Grammatiktest erkannt werden.
Glücklicherweise lassen sich Linksrekursionen vermeiden. Die linksrekursive Regel:
a = a C | B
kann umgeschrieben werden. a muss gewiss mit B beginnen. Auf B kann C folgen und auf B C kann ein weiteres C folgen. Das formale Resultat ist also:
a = B C *
Angewandt auf das erste Beispiel wäre C ein leeres Symbol und für a gilt:
a = B
Anmerkung: Produktionen für den weit verbreiteten Parsergenerator Yacc sind häufig linksrekursiv. Yacc hat damit kein Problem, da er nicht wie TETRA ein Topdown-, sondern einen Bottomup-Parser ist. (Yacc kommt dafür nicht mit Rechtsrekursionen zurecht.) Will man eine für Yacc geschriebene Grammatik in eine TETRA-Grammatik übersetzen, so hilft die eben genannte Regel weiter.
|
Diese Seite gehört zur TextTransformer Dokumentation |
Home Inhalt English |