如何从令牌值转到词法分析器规则?

时间:2017-07-20 14:47:56

标签: antlr4

到目前为止,我认为令牌值(由词法分析器规则生成)与该规则的规则索引相同。显然情况并非如此,正如您在生成的代码中查看ruleNamesliteral/display names字段时所看到的那样。与显示名称(仅是标记值的字符串表示)相比,规则名称部分地处于不同的顺序,并且还包含诸如片段规则之类的内容。另一方面,没有虚拟令牌的条目(如tokens部分中所定义)。

现在,当您想从令牌值获取规则索引时,您会如何做到这一点?我能想象的唯一方法是从词汇表中获取符号名称(这是规则名称),然后在规则名称数组中查找。但这似乎有点奇怪。应该有一个更直接的方式。有什么想法吗?

其他信息:当您想要从解析器规则开始走ATN时需要查找。 Lexer令牌存储为转换标签及其来源。为了继续在词法分析器ATN中行走,您需要正确的规则索引。

1 个答案:

答案 0 :(得分:0)

一般情况下,这是不可能的。 Lexer规则可以返回与规则名称完全不对应的令牌。因此,令牌与产生它们的规则之间没有可靠的关系(通常它匹配,但并非总是如此)。