2017-11-26 2 views
0

Ich studiere die Lexer und Parsergrammatik und mit ANTLR für die Erstellung der Parser und Lexer basierend auf den .g4-Dateien. Allerdings bin ich ziemlich verwirrt, was macht pushMode und popMode im Allgemeinen?Was bedeuten pusMode, popMode, mode, OPEN und CLOSE in der Lexer-Grammatik?

OPEN    : '[' -> pushMode(BBCODE) ; 
TEXT    : ~('[')+ ; 

mode BBCODE; 

CLOSE    : ']' -> popMode ; 

Was bedeutet OPEN, pushMode, BBCODE, CLOSE und popMode im Lexergrammar? Ich habe versucht, nach diesen Modi zu suchen, aber es gibt keine klare Definition und Erklärung für diese.

+3

https://github.com/antlr/antlr4/blob/master/doc/lexer-rules.md –

+0

I Lesen Sie diesen Link, aber die Erklärung war nicht ausreichend. – CoderX

+0

@coderX: Dann fragen Sie eine * spezifische Frage *, die beim Lesen der Dokumentation aufgetreten ist. – rici

Antwort

2

pushMode und popMode sind für so genannte „Insel Grammatiken“ verwendet oder lexikalische Modi, die mit unterschiedlichen Formaten in der gleichen Datei erlauben zu tun.
Die Grundidee ist, dass der Lexer zwischen den Modi hin- und herwechselt, wenn er bestimmte Zeichenfolgen sieht.

in Grammatik Beispiel wenn LEXER [ trifft es von Standardgrammatik (d.h. Grammatik definiert außerhalb jeder mode <name>) schaltet Grammatik zwischen mode BBCODE; und CLOSE : ']' -> popMode ;
definiert, wenn es ] trifft wird es auf Standardgrammatik wechseln.

Beispiel für Inselgrammatik ist Javadoc-Tags in Java-Klasse-Quelldatei.

Theoretisch können lexikalische Modi auch verwendet werden, um Javascript in HTML zu analysieren.
, d. H. Ihre Hauptgrammatik definiert HTML, und wenn sie auf <script ... Tag trifft, könnte sie auf JavaScript-Grammatik mit -> pushMode(javascript) wechseln.
Wenn es auf </script> Tag trifft, würde es popMode zurück zu "Standard" HTML-Grammatik zurückkehren.

OPEN und CLOSE in Ihrem Beispiel sind nur lexikalische Regelnamen für ']' und '[', die in Parser Grammatik verwendet werden kann, die Lesbarkeit zu verbessern, anstatt ']' -> popMode schreiben Sie schreiben CLOSE würde.

Wenn Sie eine ernsthafte Umfassung mit ANTLR4 planen - Ich empfehle dringend, dieses Buch zu lesen: The Definitive ANTLR 4 Reference by Terence Parr

Verwandte Themen