ANTLR4 - 如何在ANTLR中将Token的类型作为Token文本获取?

4

假设我有一个包含下列令牌的语法:

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

当我使用TreeViewer可视化ParseTree或使用tree.toStringTree()打印树时,每个节点的文本都与匹配的内容相同。
因此,如果我解析"A and B or C",那么两个二元运算符将是"and" / "or"。 如果我解析"A && B || C",它们将是"&&" / "||"。
我希望无论匹配了什么文字符号,它们始终为"AND" / "OR" / "NOT"。这是否可能?

1
toStringTree只是一个调试功能,你可以在自己的代码中随意操作。我真的不明白你的问题是什么。也许是“XY问题”?(http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - Lucas Trzesniewski
换句话说,在遍历ParseTree并打印与节点相关联的文本时,使用的是原始文字符号("&&")而不是标记类型("AND")。 - Ryan O.
1个回答

9
这就是词汇表的作用。使用yourLexer.getVocabulary()yourParser.getVocabulary(),然后使用vocabulary.getSymbolicName(tokenType)获取令牌类型的文本表示。如果返回空字符串,请尝试第二步vocabulary.getLiteralName(tokenType),它返回定义令牌所使用的文本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接