ANTLR:找不到符号。

5
我有一个名为"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.jar Test.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

谢谢您!

如果你的文件名为 Sample.java,那么你的类名也必须是 Sample 而不是 Test - Jens
TestLexer.java和Test.java在同一个包中吗? - Jens
2个回答

2

TestLexer.javaTestParser.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

0

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

  1. 在包含主方法的文件中添加导入语句
  2. 将ANTLR生成的类放入与您的导入语句相同的包中
  3. 同时构建生成的两个类和包含主方法的类

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接