Gibt es einen nicht-allgemeinen CFG-Parsing-Algorithmus, der EPAL erkennt?

23

EPAL, die Sprache der geraden Palindrome, wird als die Sprache definiert, die durch die folgende eindeutige kontextfreie Grammatik erzeugt wird:

Saa

Sbb

SaSa

SbSb

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.

Alex ten Brink
quelle
1
Ich habe fast Angst zu fragen: Was ist falsch an LL (1) bei rekursiver Abstammung?
Raphael
3
Rekursiver Abstieg ohne Backtracking kann EPAL nicht verarbeiten, da die Sprache nicht LL (k) für k ist. Rekursiver Abstieg mit Backtracking kann die Grammatik in -Zeit verarbeiten, aber das ist ein allgemeiner Algorithmus mit exponentiellem Worst-Case-Verhalten, nach dem ich nicht suche. O(n2)
Alex ten Brink
O ( 2 N )O(N2) ist nicht exponentiell, sondern quadratisch. ist exponentiell. O(2N)
Victor Stafusa
1
@ Victor: Backtracking hat bei einigen Grammatiken ein exponentielles Verhalten, nur bei dieser bestimmten Grammatik nicht. Da es sich jedoch um einen Algorithmus handelt, der mit mehrdeutigen Grammatiken arbeitet, wird er als Antwort auf meine Frage herabgesetzt.
Alex ten Brink
1
@jmad: Meine Absicht ist es nicht, die Sprache zu analysieren (Sie können dies trivial in linearer Zeit tun), sondern meine Neugier zu befriedigen: Ich habe gesehen, dass sie als Beispiel für eine Sprache verwendet wird, die mit einer Analysemethode nicht analysiert werden kann Ich bin so oft gespannt, ob es eine Parsing-Methode gibt, die das erkennt.
Alex ten Brink

Antworten:

14

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()wvAwBvB()

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 )AwBvAwBvwpwvsvΘ(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).


  1. w vwpv bedeutet hier, dass und , dh kein Wort ist ein Präfix des anderen. ist für Suffixe ähnlich.wvsvws
Raphael
quelle
1
Ausgezeichnet! Genau das, wonach ich gesucht habe. Es ist großartig, dass eine Sprache, die nicht für ist, mit einem so einfachen Algorithmus syntaktisch analysiert werden kann. kNLR(k)k
Alex ten Brink
1
Nachdem ich darüber nachgedacht hatte, entdeckte ich einen kleinen Fehler in Ihrer Beschreibung: die lineare Grammatik ist eindeutig, aber es gibt kein so eindeutiges Präfix, wie Sie es beschreiben. Es gibt immer noch ein eindeutiges Präfix, aber Sie müssen möglicherweise in das Nichtterminal schauen, um es zu erhalten, und Ihre Laufzeit wird zu . Ihr Algorithmus arbeitet jedoch mit . O ( n 2 ) E P A LSaAb|aBb,Aa,BbO(n2)EPEINL
Alex ten Brink
@AlextenBrink Guter Fang. Ich habe bearbeitet, um dies zu berücksichtigen.
Raphael