2008-12-13 9 views
9

Erweiterte Backus-Naur Form: EBNFWo kann ich Material zum Lernen von EBNF bekommen?

Ich bin zu Parsen Konzepte sehr neu. Wo kann ich das Material zum Schreiben einer Grammatik für die boost :: spirit-Bibliothek, die eine EBNF-ähnliche Grammatik verwendet, leicht lesen und nachvollziehen?

Derzeit suche ich EBNF von Wikipedia.

Antwort

4

Der Wikipedia-Artikel ist genau. Wenn Sie Zugriff haben, lesen Sie unbedingt Wirth's original article auf EBNF. Die andere Sache zu wissen ist, dass EBNF entworfen wurde, um einfach zu handschreibt rekursive Abstieg Parser für Sprachen, in denen jedes syntaktische Konstrukt Identifizierung Schlüsselwörter am Anfang hat. Curly Klammern übersetzen zu while Schleifen; eckige Klammern (optionales Zeug) werden in if übersetzt, und Alternativen werden in if-then-else oder case Anweisungen übersetzt. Wenn Sie den Luxus haben, Ihre Sprache so zu gestalten, können Sie schnell einen Parser knacken und geben gute Fehlermeldungen.

Der einzige Ort, der ein wenig langweilig wird, ist, wenn Sie eine Sprache haben, in der es Infix-Operatoren mit vielen verschiedenen Rangstufen gibt. Dafür wollen Sie Dave Hansons Papier Compact Recursive-Descent Parsing of Expressions. Vielleicht hat die Princeton Tech Report Serie eine kostenlose Version, und Sie können immer den Code in Hanson's C front end betrachten.

+1

Suchen Sie nach "Compiler Construction Niklaus Wirth", sollte es einen Link zurück, wo Sie die neueste Version seines ausgezeichneten Buches frei herunterladen können. Oder schau auf seine Homepage http://www.cs.inf.ethz.ch/~wirth/ –

0

Nun, ich denke, dass Wikipedia die einfachste Möglichkeit, aus zwei Gründen:

  • Darin heißt es, die wichtigsten Punkte auf dem Artikel
  • Es hat Links für weitere Informationen am Ende der Seite

Auch ich würde vorschlagen, standart BNF zu lesen, nur um sich mit der Idee dahinter vertraut zu machen.

Zumindest fange ich immer auch mit Wikipedia an, und das hilft fast immer.

1

Here ist ein Ebnf-Parser in PHP.

Auch ein wenig über die Implementierung von Engines für reguläre Ausdrücke zu lernen, könnte helfen. Versuchen Sie: re2.

Verwandte Themen