Gute Bücher zur Parsertheorie?


9

Eines meiner Java-Projekte ist eine Abzweigung von Parboiled , und im Gegensatz zu beispielsweise Antlr oder JavaCC werden Parser zur Laufzeit generiert. Die generierten Grammatiken sind Parsing Expression Grammatiken oder PEGs (ich höre, ein anderer Begriff für sie ist "packrat").

Während die Laufzeitgenerierung die Komplexität erhöht (Bytecode-Generierung), bezieht sich ein weiterer Aspekt auf die Parser-Theorie selbst. Da ich leider keinen soliden Hintergrund in der Informatik habe, fehlen mir theoretische Kenntnisse, um vorhandenen Code auf vorhandene Konzepte abzubilden - in diesem Fall Parser.

Gibt es ein gutes Nachschlagewerk über Parser, das ich kaufen und lesen kann, oder sogar Links im Internet, die mir helfen können, ein solches "Mapping" zu erstellen, das meine schlechten theoretischen Kenntnisse berücksichtigt?

Antworten:



3

Wenn Sie mehr über die Theorie der Parser erfahren möchten, empfehle ich Band 1 dieses klassischen Buches:

Aho, Alfred V.; Ullman, Jeffrey D., Die Theorie des Parsens, Übersetzens und Kompilierens , Prentice-Hall (1972).


Dies war zum Zeitpunkt der Veröffentlichung eine Enzyklopädie zu diesem Thema. Seitdem wurden jedoch Forschungsarbeiten durchgeführt.
Babou

1

Wenn Ihnen der Sprachunterschied nichts ausmacht, dreht sich in Kapitel 8 von Perl höherer Ordnung alles um das Parsen und baut insbesondere einen Parser für rekursiven Abstieg mithilfe von Parser-Kombinatoren auf. Es ist zugänglich (wenn Sie keine Angst vor Perl haben) und kann kostenlos gelesen werden, wenn Sie möchten. Es hat mein Interesse an Parsing-Techniken vor einigen Jahren geweckt.


0

Während die Parsing-Techniken ein großartiges Buch sind und ich einige Teile mehrmals gelesen habe, konzentriert es sich auf LR-Parsing, was für Sie nicht interessant sein wird. In Ihrem speziellen Fall handelt es sich um PEGs, bei denen es sich um eine Art rekursive Top-Down-Abstiegsanalyse mit Backtracking handelt, die auf der Reihenfolge der Alternativen basiert.

Ich möchte Ihnen vorschlagen, sich Parser-Kombinatoren anzusehen, die dieselbe Strategie verwenden. Sie können beispielsweise dieses Dokument unter http://research.microsoft.com/pubs/65201/parsec-paper-letter.pdf lesen, in dem Haskell zum Erstellen von Parser-Kombinatoren verwendet wird. Überprüfen Sie den Abschnitt, in try dem sie Backtracking enthalten (Abschnitt 3.4).

In jedem Fall müssen Sie Folgendes lernen:

  • Rekursive Analyse und LL-Grammatik
  • fester Lookahead vs. unendlicher Lookahead (erfolgt über Backtracking)
  • Backtracking-Strategien
  • wie man mit linksrekursiven Regeln umgeht
  • Speicherung der Teilergebnisse zur Vermeidung von exponentiellem Verhalten
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.