微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Antlr4 c++ 从 ParseTree 获取规则名称 *

如何解决Antlr4 c++ 从 ParseTree 获取规则名称 *

在遍历创建的解析树时,我需要一种方法来从我当前正在遍历的 antlr4:tree:ParseTree * 节点获取解析器规则的名称

例如,如果语法是:

t: AB;

(暂时忽略词法分析器规则)并且 t 是一些规则,我需要检查节点(类型:ParseTree *)是否对应于规则 t。

谢谢

解决方法

kaby76 的回答是正确的

antlr4::RuleContext *x = dynamic_cast<antlr4::RuleContext *>(node);
auto ri = x->getRuleIndex();
auto name = parser.getRuleNames()[ri];
std::cout << name << std::endl;

其中 node 是 ParseTree 中的某个节点,name 将是解析器规则的名称,如 std::string

正如 Mike Lischke 在下面所说的,使用规则索引 (ri) 和带有比较规则的枚举会更容易

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。