Antlr4 使用一个备选方案获取令牌的名称
现在,如果标记只包含一个替代项,则ANTLR不会返回Lexer标记名,例如,对于标记Antlr4 使用一个备选方案获取令牌的名称,antlr4,Antlr4,现在,如果标记只包含一个替代项,则ANTLR不会返回Lexer标记名,例如,对于标记SUZY:'SUZY''Suzy'将在解析树中进行编码 现在,我使用标记名来编码一些有用的信息,例如,SUZY_GENDER_femal:'SUZY' 到目前为止,我已经找到了两种解决方案来获取令牌名称,即使令牌只包含一个备选方案: 在标记中重复相同的选项:SUZY_GENDER_femal:'SUZY'|'SUZY' 使用fragment关键字: 这两种解决方案都有效,但并不理想。我正在研究ANTLR实现,以一
SUZY:'SUZY'代码>'Suzy'
将在解析树中进行编码
现在,我使用标记名来编码一些有用的信息,例如,SUZY_GENDER_femal:'SUZY'代码>
到目前为止,我已经找到了两种解决方案来获取令牌名称,即使令牌只包含一个备选方案:
在标记中重复相同的选项:SUZY_GENDER_femal:'SUZY'|'SUZY'代码>
使用fragment
关键字:
这两种解决方案都有效,但并不理想。我正在研究ANTLR实现,以一种方式改变令牌的行为,即返回它们的名称,但代码相当复杂,即使改变可能很容易,也需要一些时间
有人知道该在代码中查找什么吗?(可能只需在适当的位置添加一行就可以了)或者我误用了标记名,我应该使用不同的ANTLR机制来获取我想要的信息?您的lexer有一个静态的词汇表。试试这个:
Token token = ...
String tokenName = YourLexer.VOCABULARY.getSymbolicName(token.getType());
谢谢,就是这个。实际上,我使用了不推荐使用的方法来获取令牌名称:parser.getTokenNames()[token.getType()]代码>-这就是问题所在。
Token token = ...
String tokenName = YourLexer.VOCABULARY.getSymbolicName(token.getType());