EPAL, die Sprache der geraden Palindrome, wird als die Sprache definiert, die durch die folgende eindeutige kontextfreie Grammatik erzeugt wird:
EPAL ist der Fluch vieler Parsing-Algorithmen: Ich habe noch keinen Parsing-Algorithmus für eindeutige CFGs gefunden, der jede Grammatik analysieren kann, die die Sprache beschreibt. Es wird oft verwendet, um zu zeigen, dass es eindeutige CFGs gibt, die von einem bestimmten Parser nicht analysiert werden können. Dies hat meine Frage inspiriert:
Gibt es einen Parsing-Algorithmus, der nur eindeutige CFGs akzeptiert, die auf EPAL funktionieren?
Natürlich kann man einen Ad-hoc-Parser mit zwei Durchgängen für die Grammatik entwerfen, der die Sprache in linearer Zeit analysiert. Ich interessiere mich für Analysemethoden, die nicht speziell für EPAL entwickelt wurden.
quelle
Antworten:
Betrachten Sie die folgende Skizze einer Analysestrategie auf eigenes Risiko.
Anstatt die Eingabe nur von einem Ende aus zu lesen, lesen wir von beiden Seiten und suchen nach übereinstimmenden Regeln. Wir können dies im rekursiven Abstiegsstil tun; Suchen Sie bei einem Aufruf von das Präfix und das Suffix für die Eingabe, sodass es eine Regel , und steigen Sie für das verbleibende Wort auf ab. Wenn es keine übereinstimmende Regel gibt, lehnen Sie das Wort ab.w v A → w B v B ( )A ( ) w v A → w B v B ( )
Dieser Algorithmus analysiert alle linearen, eindeutigen Grammatiken. Es dauert lineare Zeit , wenn alle Regelpaar und haben oder ¹. Dies schließt EPAL ein. Andernfalls müssen wir nach vorne schauen, damit wir uns Zeit für können.A → w ' B ' v ' w ≢ p w ' v ≢ s v ' Θ ( n 2 )A → w B v A → w′B′v′ w ≢pw′ v ≢sv′ Θ ( n2)
Die Idee funktioniert überhaupt nicht für nichtlineare Grammatiken. Lineare, aber mehrdeutige Grammatiken können im Allgemeinen nicht ohne Rückverfolgung analysiert werden (zumindest für negative Eingaben).
quelle