Konvertieren Sie PEG in BNF

7

Das Analysieren von Ausdrucksgrammatiken (PEGs) ist eindeutig und hat eine oberflächlich ähnliche Syntax wie BNF , enthält jedoch drei wichtige Unterschiede:

  1. Der bestellte Auswahloperator e1 / e2 / e3.
  2. Das und Prädikat &.
  3. Der Nicht-Operator !.

Ich habe ein paar Fragen:

  1. Sind die von PEGs erkannten Sprachen alle kontextfrei?
  2. Wenn die Antwort auf (1) Nein lautet, gibt es ausdrucksstarke Grammatikformalismen, die garantiert nur eindeutige Grammatiken erzeugen? Insbesondere würde fallen &und !nur kontextfreie Grammatiken ergeben?
  3. Wenn alle PEGs kontextfrei sind, können sie über einen Algorithmus in eine äquivalente BNF umgewandelt werden?

Der Kontext ist, dass ich Generierungsfunktionen für eine PEG-Bibliothek unter Verwendung des Chomsky-Schützenberger-Aufzählungssatzes berechnen möchte . Dies scheint eine Spezifikation der Grammatik in einer Standardform ähnlich BNF zu erfordern.

RekursivIronic
quelle

Antworten:

6
  1. Sind die von PEGs erkannten Sprachen alle kontextfrei?

Nein, wie Brian Ford in seiner Veröffentlichung von PEGs aus dem Jahr 2004 hervorhob , aus der das folgende kurze Zitat hervorgeht:

Satz: Die Klasse der PELs enthält nicht kontextfreie Sprachen.

Beweis: Die klassische Beispielspracheeinnbncn ist nicht kontextfrei, aber wir können es mit einem PEG erkennen G=({EIN,B.,D.}},{ein,b,c}},R.,D.), wobei R die folgenden Definitionen enthält:

EINeinEINb/.ε
B.bB.c/.ε
D.&(EIN!b)einB.!.

 

  1. Wenn die Antwort auf (1) Nein lautet, gibt es ausdrucksstarke Grammatikformalismen, die garantiert nur eindeutige Grammatiken erzeugen? Insbesondere würde fallen& und ! nur kontextfreie Grammatiken liefern?

Auch ohne ! (und daher ohne &, da es formal definiert ist in Bezug auf !) müssten Sie sich immer noch mit der impliziten Ergänzung befassen, die in der Definition der geordneten Wahl verborgen ist. Ich habe kein konkretes Beispiel für eine geordnete Auswahl, die zu einer Nicht-CFL führt, aber ich würde versuchen, eine zu finden, indem ich mit zwei CFGs beginneL.1 und L.2 deren Differenz keine CFL ist und die in PEGs umgewandelt werden kann P.1 und P.2. Nun, wennc ist ein Symbol nicht in beiden Sprachen, dann die PEG P.2/.P.1c sollte erkennen L.2(L.1- -L.2)c, die keine CFL ist.

  1. Wenn alle PEGs kontextfrei sind, können sie über einen Algorithmus in eine äquivalente BNF umgewandelt werden?

Wenn meine obige Vermutung richtig ist, ist diese Frage nicht zutreffend, aber auf jeden Fall gibt es keinen mir bekannten Algorithmus zum Konvertieren zwischen PEGs und CFGs, und ich glaube, dass die Gleichwertigkeit eines PEG und eines CFG unentscheidbar ist. Diese Tatsache erschwert das oben vorgeschlagene Beweisverfahren. :) :)

Rici
quelle
Ich bin mir nicht sicher, ob ich dir folge P.1/.P.2C.Beispiel. Aus dem Artikel "PEGs verwenden einen priorisierten Auswahloperator '/'. Dieser Operator listet alternative Muster auf, die der Reihe nach getestet werden sollen, bedingungslos unter Verwendung der ersten erfolgreichen Übereinstimmung." Beliebige Zeichenfolge einschließlichC. würde die erste Bedingung nicht bestehen, so ist die erkannte Sprache L.1(L.2C.), was eindeutig kontextfrei ist.
RekursivIronic
"Ich glaube, dass die Gleichwertigkeit von PEG und CFG unentscheidbar ist." Das ist wahrscheinlich wahr, aber irrelevant. Viele Verfahren erzeugen äquivalente Spezifikationen (z. B. Konvertierung in die Chomsky-Normalform), auch wenn die Entscheidung über die Äquivalenz beliebiger Grammatiken nicht entschieden werden kann.
RekursivIronic
1
@rekursiv: So funktioniert die von PEG bestellte Auswahl nicht. Der Fallback zuL.2c passiert nur wenn L.1passt nicht zusammen. Wenn es übereinstimmt, verursacht die Tatsache, dass das Muster anschließend fehlschlägt, keinen Fallback. Eine geordnete Auswahl ist nicht nur eine Möglichkeit, Parses zu unterscheiden.
Rici
1
Ah OK, bis. Wäre die Sprache dann nichtL.1(L.2- -L.1)c? In jedem Fall scheint Ihr zugrunde liegender Punkt korrekt zu sein, sodass das Chomsky-Schützenberger-Theorem nicht gilt. Ich muss mein Projekt wechseln, um eine Standard-Parsing-Bibliothek zu unterstützen, die auf CFGs basiert. Vielen Dank!
RekursivIronic
@RecursivelyIronic: Ja, Sie haben Recht, ich hätte es als festgelegten Unterschied schreiben sollen, und ich habe die Antwort korrigiert. Vielen Dank. (Ich persönlich finde es schwierig, über die PEG-Semantik nachzudenken, aber ein Teil davon ist mangelnde Erfahrung. Das ist alles sehr zirkulär. Aber ich würde sie nicht in einem Kontext verwenden, in dem ich die Grammatik analysieren oder transformieren wollte, gerade wegen der Schwierigkeiten beim Analysieren und / oder Transformieren von PEG-Grammatiken.)
Rici