Extrahiere BNF-Grammatikregeln aus der yacc-Datei

8

Ich habe eine YACC-Datei, die eine bestimmte Sprache beschreibt, für die ich einen Editor mit IMP (Eclipse-Projekt) entwickle. Ich benutze LPG als Parser-Generator, also musste ich eine BNF-Regel aus meiner YACC-Datei extrahieren. Die YACC-Datei, die ich erhalten habe, enthält Regeln und Aktionen. Ich wollte jedoch nur die Regeln der Grammatikbeschreibung extrahieren, die in LPG verwendet werden. Eine Möglichkeit besteht darin, die Regeln manuell zu extrahieren und in die BNF-Syntax umzuformatieren (oder ein Programm zu schreiben, um es so zu konvertieren, wie ich es möchte). Ich habe mich gefragt, ob es einen automatisierten Weg dafür gibt. Ich habe in einigen Blogs gelesen, dass Bison helfen könnte, aber ich konnte nicht die richtigen Befehle finden. weiß jemand, wie man mit diesem Problem umgeht.

Ich kann die yacc-Datei, die ich habe, nicht wirklich posten, da sie vertraulich ist. aber ich könnte ein Beispiel wie folgt geben

%Vor%

Was ich wollte, dass es in konvertiert werden soll, ist einfach wie

%Vor%     
lferasu 20.10.2013, 12:02
quelle

1 Antwort

9

Bison kann helfen, wenn Sie bereit sind, eine Nachbearbeitung vorzunehmen.

Wenn Sie bison mit der Option -v ausführen, wird eine Datei mit dem Namen filename.output erstellt (wobei filename der Basisname der Datei .y ist); Diese Datei enthält eine Kopie der Grammatik und eine Beschreibung jedes Zustands. Die Grammatik hat keine Aktionen und es gibt eine Produktion pro Zeile. Aber du musst etwas arbeiten:

  1. Jede Produktion ist nummeriert. Sie müssen diese Nummern entfernen.

  2. Wenn es Mid-Rule-Aktionen gibt, werden sie als leere Nicht-Terminals mit merkwürdigem Namen angezeigt. Die Namen sind so etwas wie $@8 oder @2 . Sie müssen diese Token und die entsprechenden leeren Produktionen löschen.

  3. Leere Produktionen werden (zumindest in einer neuen Version von bison) als /* empty */ angezeigt. Das ist vielleicht nicht Ihre Präferenz.

  4. Es ändert sich nicht : zu ::=

Ich habe auf diese Weise Grammatiken aus yacc / bison-Dateien extrahiert, und das ist sehr einfach; Sie können alle oben genannten Änderungen mit einem einfachen Skript sed oder awk vornehmen.

    
rici 20.10.2013, 14:12
quelle

Tags und Links