ANTLR4-树模式匹配代码错误

问题描述 投票:0回答:1

我基本上遵循网址中答案的步骤: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());
    }
  }
}
java antlr antlr4
1个回答
0
投票

您必须首先生成词法分析器和解析器类。执行以下操作:

  1. 下载ANTLR JAR:https://www.antlr.org/download/antlr-4.8-complete.jar(将其与Main.java文件放在同一文件夹中]
  2. 也在此文件夹中,下载Java语法文件:https://raw.githubusercontent.com/antlr/grammars-v4/master/java/java/JavaLexer.g4https://raw.githubusercontent.com/antlr/grammars-v4/master/java/java/JavaParser.g4
  3. 打开终端,导航到您下载文件的文件夹,并根据Java语法生成词法分析器和解析器类:

    java -jar antlr-4.8-complete.jar *.g4
    
  4. 编译所有.java源文件:

    javac -cp antlr-4.8-complete.jar *.java
    
  5. 运行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
© www.soinside.com 2019 - 2024. All rights reserved.