我基本上遵循网址中答案的步骤:ANTLR 4 - Tree pattern matching。但是,我得到了错误:
错误:(29,5)java:找不到符号符号:类JavaLexer位置:Main类。
我的代码是完全相同的。似乎Java不知道JavaLexer是。谁能帮我吗?
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.pattern.ParseTreeMatch;
import org.antlr.v4.runtime.tree.pattern.ParseTreePattern;
import java.util.List;
public class Main {
public static void main(String[] args) {
String source = "package sampleCodes;\n" +
"\n" +
"public class fruits {\n" +
"\n" +
" static { int q = 42; }\n" +
"\n" +
" public static void main(String[] args){\n" +
" int a = 10;\n" +
" System.out.println(a);\n" +
" }\n" +
"}\n";
JavaLexer lexer = new JavaLexer(CharStreams.fromString(source));
JavaParser parser = new JavaParser(new CommonTokenStream(lexer));
ParseTree tree = parser.compilationUnit();
ParseTreePattern p = parser.compileParseTreePattern("<IDENTIFIER> = <expression>", JavaParser.RULE_variableDeclarator);
List<ParseTreeMatch> matches = p.findAll(tree, "//variableDeclarator");
for (ParseTreeMatch match : matches) {
System.out.println("\nMATCH:");
System.out.printf(" - IDENTIFIER: %s\n", match.get("IDENTIFIER").getText());
System.out.printf(" - expression: %s\n", match.get("expression").getText());
}
}
}
您必须首先生成词法分析器和解析器类。执行以下操作:
Main.java
文件放在同一文件夹中]打开终端,导航到您下载文件的文件夹,并根据Java语法生成词法分析器和解析器类:
java -jar antlr-4.8-complete.jar *.g4
编译所有.java
源文件:
javac -cp antlr-4.8-complete.jar *.java
运行Main
类:
# For Mac & *nix
java -cp antlr-4.8-complete.jar:. Main
# or on Windows
java -cp antlr-4.8-complete.jar;. Main
以下内容将打印在您的控制台上:
MATCH:
- IDENTIFIER: q
- expression: 42
MATCH:
- IDENTIFIER: a
- expression: 10