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?
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.
quelle
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:
quelle