Frage

Ich genieße YARD mit viel:

http://www.ootl.org/yard/

http://code.google.com/p/yardparser/

http://www.codeproject.com/KB/recipes/yard- tokenizer.aspx

Ich konnte voll funktionsfähigen Rechner konstruieren. Ich Auswertung YARD PHP-Parser zu tun. Bitte informieren Sie freundlich über die Beschränkungen von PEG Grammatik & Parser-Generatoren. Vielen Dank!

War es hilfreich?

Lösung

ich glaube, das große „Problem“ mit PEGs ist, dass sie passen in die normalen Taxonomie von Grammatiken nicht, wie sie in eine grundsätzlich anderen Art und Weise arbeiten. Normale Grammatiken sind „rückwärts“ in dem Sinne, dass sie alle möglichen Sätze (Programme) beschreiben, die erzeugt werden kann. PEGs beschreiben, wie zu analysieren - sie auf das Problem vom anderen Ende kommen

.

Aus meiner Sicht ist dies ein natürlicher Weg, um das Problem zu denken, und sicherlich für jeden handschriftlichen (rekursiv absteigenden) Parser würde ich nichts anderes tun.

Andere Tipps

Die wichtigste Einschränkung von PEG Grammatiken ist, dass sie überhaupt nicht mit Mehrdeutigkeit befassen.

Um sicher zu sein, ist dies auch ihre Stärke mit Zweideutigkeiten seit dem Umgang eines der frustrierenden Teile ist eine CFG (kontextfreie Grammatik) Werkzeug verwendet wird.

Mit PEGs geht man mit Zweideutigkeiten ausdrücklich von der Regel erhalten Sie vor einer anderen Regel übereinstimmen soll, die zweideutig passen würde, aber was Sie nicht wollen.

Das Problem ist, dass Sie nicht immer noch über einige wissen oder auch jede der Mehrdeutigkeiten in einer Sprache oder einer Grammatik und PEG-Generatoren, zumindest die, die ich habe versucht, nicht die Grammatik für Mehrdeutigkeit nicht analysieren Ihnen helfen, sie und dann entwerfen und Ihre Regeln um mit ihnen den richtigen Weg zu behandeln.

CFG Parser-Generatoren wie yacc und Bison Ihre Grammatik analysieren und alle Unklarheiten melden. Leider berichten sie oft sie in eine ziemlich kryptischen Weise, die nur schwer zu Sinne zu machen. Und natürlich ist es oft schwer, die Grammatik zu beheben, mit ihnen fertig zu werden. Aber zumindest werden Sie sich bewusst sein, dass sie existieren.

Mit einer PEG-Grammatik können Sie völlig ahnungslos von den Zweideutigkeiten in Ihrer konzeptionellen Grammatik sein, denn wenn Sie es ein PEG machen es nicht Zweideutigkeiten hat mehr, es hat nur Regeln passend und vielleicht leise unerreichbare Regeln, die auch passen würden, wenn sie hatten eine höhere Priorität. Diese könnten nicht in Ihren Tests zeigen, aber nach der Veröffentlichung zeigen können.

Mit CFG Grammatiken Sie gezwungen sind mit Mehrdeutigkeiten während der Entwicklung zu befassen, aber es wird nicht einfach sein.


Für den Fall, ich mache es nicht klar, hier ist eine sechs-jährige Diskussion von Joshua Haberman über auf dem Lambda the Ultimate Programmiersprachen Blog: PEGs und Packrat Parsing ist nicht die Antwort .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top