PEG und Leerzeichen / Kommentare

8

Ich habe etwas Erfahrung beim Schreiben von Parsern mit ANTLR und ich versuche (zur Selbsterziehung :)), einen von ihnen nach PEG (Parsing Expression Grammar) zu portieren.

Während ich versuche, ein Gefühl für die Idee zu bekommen, fällt mir eine Sache so umständlich auf, dass ich das Gefühl habe, etwas verpasst zu haben: Wie man mit Leerraum umgeht.

In ANTLR bestand der normale Weg, mit Leerzeichen und Kommentaren umzugehen, darin, die Token in einen verborgenen Kanal zu stellen, aber bei PEG-Grammatiken gibt es keinen Tokenisierungsschritt. Betrachtet man Sprachen wie C oder Java, in denen Kommentare fast überall erlaubt sind, möchte man die Kommentare sofort "verstecken", aber da die Kommentare eine semantische Bedeutung haben können (zum Beispiel beim Erzeugen von Codedokumentation, Klassendiagrammen, etc.) möchte sie nicht einfach wegwerfen.

Also, gibt es einen Weg, damit umzugehen?

    
Krumelur 09.04.2012, 11:21
quelle

2 Antworten

8

Da es keine separate Tokenisierungsphase gibt, gibt es keine "Zeit", bestimmte Zeichen (oder Token) zu verwerfen.

Da Sie sich mit ANTLR auskennen, sollten Sie es sich so vorstellen: Sagen wir, ANTLR handhabt nur PEG. Sie haben also nur Parser-Regeln, keine Lexer-Regeln. Nun, wie würdest du, sagen wir, Räume verwerfen? (Sie können nicht).

Also lautet die Antwort auf Ihre Frage: Sie können Ihre Grammatik nicht mit Space-Regeln in der PEG streuen:

ANTLR

%Vor%

PEG

%Vor%     
Bart Kiers 13.04.2012, 11:13
quelle
2

Es ist möglich, PEG-Parser zu verschachteln. Die Idee ist, dass die ersten Parser Zeichen und Feed-Token für den zweiten Parser verbrauchen. Der zweite PEG-Parser verbraucht Tokens und erledigt die eigentliche Arbeit.

Das bedeutet natürlich, dass Sie einen Vorteil der Parsing-Expression-Grammatik im Vergleich zu anderen Parsing-Schemata aufgeben: Die Einfachheit von PEG.

    
nalply 05.05.2012 17:08
quelle

Tags und Links