当访问者处理我的 ANTLR4 解析树时,有时我需要知道我的规则节点所在的父规则节点。在 的在线 API 文档中ParserRuleContext,我发现没有可以返回对象所表示的规则名称的方法/字段。我知道规则名称是子ParserRuleContext类名称的一部分,例如function_definition规则节点是 class Function_definitionContext。但要查询类名,我需要使用 Java 反射并手动Context在末尾删除字符串。
是否有更简单的方法来检索对象所代表的规则名称ParserRuleContext?
查询父规则节点的名称是一个常见的需求。例如,在处理 C++ 语法时,C++ 类声明可以位于全局范围、函数定义或另一个类声明中,这意味着规则节点class_declaration可以嵌套在global_scope,function_definition或class_declaration规则节点下。如果我只想隔离class_declaration下的那些节点global_scope,我需要查找父节点并确保它们不是function_definition或class_declaration。
要从 a 中获取ParserRuleContext字符串形式的规则名称,您可以执行以下操作:
String[] ruleNames = parser.getRuleNames();
String ruleName = ruleNames[parserRuleContext.getRuleIndex()];
Run Code Online (Sandbox Code Playgroud)
您还可以将规则索引与生成的常量进行比较:
boolean isClassDeclaration =
parserRuleContext.getRuleIndex() == MyParser.RULE_class_declaration;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3818 次 |
| 最近记录: |