我试图理解 ANTLR 4 中的解析树匹配,所以为此
我有以下java代码:
package sampleCodes;
public class fruits {
public static void main(String[] args){
int a = 10;
System.out.println(a);
}
}
我正在使用 ANTLR 4 创建此代码的解析树。现在,我想使用树模式匹配函数来查找“int a = 10;”。
GitHub 上有一个文档:https://github.com/antlr/antlr4/blob/master/doc/tree-matching.md https://github.com/antlr/antlr4/blob/master/doc/tree-matching.md它通过一个例子解释了这一点(类似这样):
ParseTree t = ...; // assume t is a statement
ParseTreePattern p = parser.compileParseTreePattern("<ID> = <expr>;", MyParser.RULE_statement);
ParseTreeMatch m = p.match(t);
if ( m.succeeded() ) {...}
通过阅读本文档和其他一些资源,我了解到:
ParseTreePattern p = parser.compileParseTreePattern("<ID> = <expr>;", MyParser.RULE_statement);
作为第二个参数传递的规则必须能够正确解析作为第一个参数提供的模式。
现在我使用的语法是这里给出的java:https://github.com/antlr/grammars-v4/tree/master/java https://github.com/antlr/grammars-v4/tree/master/java
JavaLexer.g4,
JavaParser.g4
我无法从上面的 GitHub 文档中获得有关如何构建模式字符串及其相应规则的太多信息。所以我尝试了几种组合来获得匹配,但它们似乎都不起作用。例如:
ParseTreePattern p = parser.compileParseTreePattern("<variableDeclaratorId> = <variableInitializer>", parser.RULE_variableDeclarator);
ParseTreeMatch m = p.match(tree);
System.out.println(m);
这给出:
匹配失败;找到 0 个标签
我知道我的字符串模式肯定做错了什么。任何人都可以帮我解释这个模式匹配函数,并告诉我在这种情况下使用的正确参数应该是什么。另外,提供一些有用资源的链接将非常有帮助,我可以在其中了解更多信息并处理复杂的模式。(我在 ANTLR4 参考中找不到它)
此代码的解析树的一部分 https://i.stack.imgur.com/4WWvc.png