Java ANTLR4-树模式匹配代码错误
我基本上遵循url中答案的步骤:。但是,我得到了一个错误: 错误:(29,5)java:找不到符号 符号:类JavaLexer 地点:班主 我的代码完全相同。Java似乎不知道JavaLexer是什么。有人能帮我吗Java ANTLR4-树模式匹配代码错误,java,antlr,antlr4,Java,Antlr,Antlr4,我基本上遵循url中答案的步骤:。但是,我得到了一个错误: 错误:(29,5)java:找不到符号 符号:类JavaLexer 地点:班主 我的代码完全相同。Java似乎不知道JavaLexer是什么。有人能帮我吗 import org.antlr.v4.runtime.*; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.pattern.ParseTreeMatch; import org
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());
}
}
}
import org.antlr.v4.runtime.*;
导入org.antlr.v4.runtime.tree.ParseTree;
导入org.antlr.v4.runtime.tree.pattern.parsetReMatch;
导入org.antlr.v4.runtime.tree.pattern.ParseTreePattern;
导入java.util.List;
公共班机{
公共静态void main(字符串[]args){
String source=“包采样代码;\n”+
“\n”+
“公共类水果{\n”+
“\n”+
“静态{int q=42;}\n”+
“\n”+
“公共静态void main(字符串[]args){\n”+
“int a=10;\n”+
“System.out.println(a);\n”+
“}\n”+
“}\n”;
JavaLexer-lexer=newjavalexer(CharStreams.fromString(source));
JavaParser=newjavaparser(newcommontokenstream(lexer));
ParseTree-tree=parser.compilationUnit();
ParseTreePattern p=parser.compileParseTreePattern(“=”,JavaParser.RULE\u variableDeclarator);
List matches=p.findAll(树,//variableDeclarator);
用于(ParsetReMatch匹配:匹配){
System.out.println(“\n匹配:”);
System.out.printf(“-IDENTIFIER:%s\n”,match.get(“IDENTIFIER”).getText());
System.out.printf(“-expression:%s\n”,match.get(“expression”).getText());
}
}
}
您必须首先生成lexer和parser类。请执行以下操作:
Main.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
向我们展示运行ANTLR和编译生成的类以及编译和运行
Main
类所运行的命令。我不使用命令编译和运行代码。我使用IntelliJ并导入一些包来运行它。这就是我出错的原因吗?我是ANTLR新手。在运行我的程序之前,我应该使用命令来获取lexer和parser java文件吗?请原谅我在第5步中,我运行了Windows命令,得到了错误:用法:java[options][args…]或java[options]-m[/][args…]java[options]。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。要为长选项指定参数,可以使用--=或--。bash:Main:没有这样的文件或目录。Mac命令和Windows命令之间的区别是否仅仅是“;”?是的,Mac/*nix和的区别是:
代码>适用于WIndows。但是,如果您在Windows或类似平台上使用Git Bash,您可以尝试使用带有:
的版本;int b=2;内部温度=a;a=b;b=温度代码>如何执行此操作?你有什么建议吗?我想你现在的问题已经得到了回答。如果您有更多问题,请随意创建一个新问题。一定要添加你已经尝试过的东西。