假设我的语法有这样的标记:
AND : 'AND' | 'and' | '&&' | '&';
OR : 'OR' | 'or' | '||' | '|' ;
NOT : 'NOT' | 'not' | '~' | '!';
当我使用TreeViewer可视化ParseTree或使用tree.toStringTree()打印树时,每个节点的文本与匹配的文本相同。
因此,如果我解析" A和B或C",那么两个二元运算符将是"和" /"或"。 如果我解析" A&& B || C",他们将"&&" /" ||"。
我喜欢的是他们永远是" AND" /" OR /" NOT",无论匹配什么文字符号。这可能吗?
答案 0 :(得分:4)
这就是词汇表的用途。使用yourLexer.getVocabulary()
或yourParser.getVocabulary()
,然后使用vocabulary.getSymbolicName(tokenType)
作为令牌类型的文本表示形式。如果返回空字符串,请尝试第二步vocabulary.getLiteralName(tokenType)
,返回用于定义令牌的文本。