访客中的ANTLR4C++目标GETLIGN()/GETHARCHOPACTION IN()

访客中的ANTLR4C++目标GETLIGN()/GETHARCHOPACTION IN(),antlr4,c++17,Antlr4,C++17,在访问者中获取行/位置数据的推荐方法是什么?没有办法从上下文中获取令牌,至少类定义中没有函数允许这样做,那么从上下文中获取令牌的推荐方法是什么 使用antlr4和c++17 -更新- 谢谢迈克为我指出了正确的方向,并迅速做出了回应。因此,我的解决方案如下: ctx->ID->getSymbol->getLine或->getCharPositionInLine 其中ID是其中一个终端节点的名称可以在上下文中的一个lexer规则名称终端节点和解析器上下文都具有携带位置信息的令牌成员。对于解析器上下文

在访问者中获取行/位置数据的推荐方法是什么?没有办法从上下文中获取令牌,至少类定义中没有函数允许这样做,那么从上下文中获取令牌的推荐方法是什么

使用antlr4和c++17

-更新-

谢谢迈克为我指出了正确的方向,并迅速做出了回应。因此,我的解决方案如下:

ctx->ID->getSymbol->getLine或->getCharPositionInLine


其中ID是其中一个终端节点的名称可以在上下文中的一个lexer规则名称

终端节点和解析器上下文都具有携带位置信息的令牌成员。对于解析器上下文,这是其应用范围的开始和结束节点。参见C++目标。< / P>是的,我看到了令牌。H代码。我只是不知道如何从访问者那里获取令牌,因为所有生成的上下文都拒绝ctx->getToken和ctx->token,因为它们没有将它们作为成员函数。此外,TerminalNodes只有父节点和getSymbol。但是,如何直接从上下文中获取令牌?在antlr生成的解析器中,在任何上下文中都没有返回令牌的成员函数。您必须强制转换。如果上下文是对其进行转换的解析器上下文,则从中获取开始和停止标记。如果是一个终端节点,则转换为该节点,并从getSymbol函数中获取令牌。