2016-06-29 3 views
0

sagen, dass ich eine Grammatik, die Token wie diese hat:ANTLR4 - Wie bekomme ich den Tokentyp als Tokentext in ANTLR?

AND  : 'AND' | 'and' | '&&' | '&'; 
OR   : 'OR' | 'or' | '||' | '|' ; 
NOT  : 'NOT' | 'not' | '~' | '!'; 

Wenn ich den Syntaxbaum mit TreeViewer oder drucken Sie den Baum mit tree.toStringTree() sichtbar zu machen, jedem Text des Knotens ist das gleiche wie das, was abgestimmt wurde.

Also, wenn ich "A und B oder C" analysieren, werden die zwei binären Operatoren "und"/"oder" sein. Wenn ich "A & & B || C" analysiere, sind sie "& &"/"||".

Was ich möchte ist für sie immer zu sein „und“/„OR /‚NOT‘, unabhängig davon, was wörtliche Symbol abgestimmt wurde. Ist das möglich?

+1

'toStringTree' nur eine Debug-Funktion ist, können Sie kann tun, was Sie wollen, innerhalb Ihres eigenen Codes. Ich verstehe nicht wirklich, was Ihr Problem ist. [XY-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) vielleicht e? –

+0

Um es anders auszudrücken, wenn Sie den ParseTree durchlaufen und den Text drucken, der einem Knoten zugeordnet ist, ist es das ursprüngliche Literalsymbol ("&&") und nicht der Tokentyp ("AND"). –

Antwort

1

Dies ist, was das Vokabular für ist. Verwenden yourLexer.getVocabulary() oder yourParser.getVocabulary() und dann vocabulary.getSymbolicName(tokenType) für die Textdarstellung der Token-Typ. Wenn das eine leere Zeichenfolge zurückgibt, versuchen als zweiten Schritt vocabulary.getLiteralName(tokenType), die den Text des Tokens definieren zurückgibt.