Java ANTLR:找不到符号

Java ANTLR:找不到符号,java,parsing,antlr,javac,Java,Parsing,Antlr,Javac,我有一个名为“Test.g4”的ANTLR项目,我使用antlrworks2毫无问题地创建了文件:Test.tokens、TestBaseListner.java、TestLexer.java、TestLexer.tokens、TestListener.java和TestParser.java 现在我想在程序Test.java中使用语法: import org.antlr.v4.runtime.*; import org.antlr.v4.runtime.tree.*; public clas

我有一个名为“Test.g4”的ANTLR项目,我使用antlrworks2毫无问题地创建了文件:Test.tokens、TestBaseListner.java、TestLexer.java、TestLexer.tokens、TestListener.java和TestParser.java

现在我想在程序Test.java中使用语法:

import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;

public class Test {
    public static void main(String[] args) throws Exception {
        // create a CharStream that reads from standard input
        ANTLRInputStream input = new ANTLRInputStream(System.in);

        // create a lexer that feeds off of input CharStream
        TestLexer lexer = new TestLexer(input);

        // create a buffer of tokens pulled from the lexer
        CommonTokenStream tokens = new CommonTokenStream(lexer);

        // create a parser that feeds off the tokens buffer
        TestParser parser = new TestParser(tokens);

        ParseTree tree = parser.init(); // begin parsing at init rule
        System.out.println(tree.toStringTree(parser)); // print LISP-style tree
    }
}
当我尝试使用
“javac-classpath/path/java2/antlr-4.4-complete.jartest.java”
编译它时,我得到以下错误:

Test.java:19: error: cannot find symbol
        TestLexer lexer = new TestLexer(input);
        ^
  symbol:   class TestLexer
  location: class Test
Test.java:19: error: cannot find symbol
        TestLexer lexer = new TestLexer(input);
                                        ^
  symbol:   class TestLexer
  location: class Test
Test.java:25: error: cannot find symbol
        TestParser parser = new TestParser(tokens);
        ^
  symbol:   class TestParser
  location: class Test
Test.java:25: error: cannot find symbol
        TestParser parser = new TestParser(tokens);
                                          ^
  symbol:   class TestParser
  location: class Test
4 errors

谢谢大家!

您需要构建并导入由ANTLR生成的词法分析器和解析器。要做到这一点,您需要:

  • 使用main方法将import语句添加到文件中
  • 将ANTLR生成的类放入一个包中,就像导入语句一样
  • 使用main方法构建生成的类和类

  • TestLexer.java
    TestParser.java
    也应该在同一个命令中使用
    Test.java
    进行编译,否则编译器将不知道在哪里查找它们的二进制文件。尝试调用
    javac
    ,如下所示:

    javac -classpath /path/java2/antlr-4.4-complete.jar *java
    
    或手动传递所有文件:

    javac -classpath /path/java2/antlr-4.4-complete.jar Test.java TestLexer.java TestParser.java
    

    如果您的文件名为
    Sample.java
    ,那么您的类名也必须是
    Sample
    而不是
    Test
    TestLexer.java是否与Test.java在同一个包中?