Ich lerne, wie man Parser mit Grammatiken erstellt, aber ich habe versucht, Kommentare auszudrücken, weil sie fast überall erscheinen können.
Dies zeigt an, dass Kommentare aus dem Token-Stream entfernt werden können, bevor das Parsen stattfindet.
Ist das die Standardpraxis oder werden Kommentare jemals / oft in Grammatiken angegeben?
Antworten:
Es ist sehr üblich, es als eine Form von Leerraum zu behandeln. Ähnlich wie Zeilenumbrüche in semikolonorientierten Sprachen wie C.
Sobald es sich um eine Art Leerraum handelt, ignorieren Sie ihn häufig höher im Parser.
quelle
Sie sind normalerweise nicht.
Sie werden vom Lexer entfernt, wenn der Quellcode von Zeichen in Token umgewandelt wird.
Dann erhält der Parser Token und erstellt einen AST. Wenn der Parser seine Arbeit erledigt, sind Kommentare bereits verschwunden, sodass sie nicht in der Grammatik erscheinen müssen.
quelle
Kurze kurze Antwort
Ja, es ist die Standardpraxis, Kommentare im "Lexer" oder "Parser" zu erkennen.
Manchmal hat der "Parser" einen eingebauten "Lexer" oder wird mit dem "Parser" als einzelnes Tool ("Lexer-Parser") gemischt.
Erweiterte Antwort
Ich arbeite nur in diesem Fall.
Die meisten "Scanner" (auch als "Tokenizer" oder "Lexer" bekannt) erkennen Kommentare, werden jedoch entfernt, wenn Token an den "Parser" zurückgegeben werden.
Manchmal verwendet eine Programmiersprache einige Kommentare mit einer besonderen Bedeutung, z. B. "Compiler-Direktiven" oder "Dokumentation".
Beispiel für einen Standardkommentar:
Beispiel für einen Richtungskommentar:
Kommentar zum Dokumentationsgenerator Beispiel:
Die meisten Compiler-Tools erkennen diese speziellen Kommentare mit einem Analysator oder Präprozessor, der nicht der Hauptlexer oder Parser ist und sogar einen eigenen kleinen Lexer hat.
Prost.
quelle
Einige Parser, die Kommentare und / oder unzulässige Eingaben im AST beibehalten, fügen sie allen Knoten des AST als Eigenschaften hinzu.
Sie können sich das Microsoft Roslyn-Projekt ansehen, das dies tut, wenn ich mich richtig erinnere.
quelle