一旦初始化了解析器、lexer并获得了translationUnit上下文,如何直接跳转到(最近的)parserRuleContext,该上下文在antl4(cpp运行时)中包含特定的行和字符位置?
通常我用
Listener
用于遍历TranslationUnit上下文的模式。在每个访问的上下文中,我可以使用以下代码获取上下文的相应行和字符位置:
antlr4::Token* tokenclass = _tokenstream->get(myContext->getSourceInterval().a); // use ".b" if end of interval is needed
size_t CharPositionStartInLine = tokenclass->getCharPositionInLine();
size_t LineStart = tokenclass->getLine();
我想执行相反的操作:从特定的行和字符位置获取一个令牌,然后获取(第一个)父上下文。有可能吗?
我想我可以通过检查每个行和字符的位置来实现我想要的(即根据行和字符的位置找到一个上下文)。
context
在函数内部
enterEveryRule(antlr4::ParserRuleContext* context)
但这似乎过于复杂了。那么,是否有一种更简单的方法来恢复特定行/字符位置的ParserRuleContext?