Java ANTLR4-树模式匹配代码错误

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

我基本上遵循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.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类。请执行以下操作:

  • 下载ANTLR JAR:(将其放在与
    Main.java
    文件相同的文件夹中)
  • 同样在这个文件夹中,下载Java语法文件:和
  • 打开终端,导航到已下载文件的文件夹,并从Java语法生成lexer和parser类:

    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=温度如何执行此操作?你有什么建议吗?我想你现在的问题已经得到了回答。如果您有更多问题,请随意创建一个新问题。一定要添加你已经尝试过的东西。