2015-01-11 2 views
4

У меня есть проект ANTLR под названием «Test.g4», а с antlrworks2 я создал без проблем файлы: Test.tokens, TestBaseListner.java, TestLexer.java, TestLexer.tokens, TestListener.java и TestParser.java.ANTLR: Не удалось найти символ

Теперь я хочу использовать грамматику в моей программе 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 

Спасибо!

+0

Если файл называется 'Sample.java' ваше имя класса также должны быть' 'Sample' не Test' – Jens

+0

ли TestLexer.java в том же пакете, что и Test.java? – Jens

ответ

1

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 
0

Вам необходимо создать и импортировать лексер и парсер, созданные ANTLR. Для этого вам необходимо:

  1. оных оператор импорта в файл с основным методом
  2. классы пут, генерируемые ANTLR в пакет, как в вашем заявлении импорта
  3. сборки как сгенерированные классы и класс с вашим основной метод
Смежные вопросы