Подтвердить что ты не робот

Antlr4-Can't load Привет, как lexer или parser

Недавно мне пришлось использовать парсер для создания проекта. Я загружаю ANTLR4 и выполняю шаги, описанные в книге The Definitive ANTLR4 Reference. Ниже перечислены шаги, которые я вводил в командной строке:

 1. export CLASSPATH=".:/<Mydirectory>/antlr-4.2.2-complete.jar:$CLASSPATH"
 2. alias antlr4='java -jar /<My directory>/antlr-4.2.2-complete.jar'
 3. alias grun='java org.antlr.v4.runtime.misc.TestRig'
 4. antlr4 Hello.g4

Все работает нормально, он генерирует java файлы, которые мне нужны. Однако после ввода

 5. grun Hello r -tokens

Сообщается Can't load Hello as lexer or parser. Я кое-что расскажу о Google, но до сих пор не могу понять, что произошло. Может кто-нибудь мне помочь?

4b9b3361

Ответ 1

Вы создали исходные файлы Java, запустив ANTLR в грамматике, но TestRig ищет скомпилированные файлы .class. Перед использованием TestRig вам нужно запустить компилятор Java в исходных файлах.

Ответ 2

Также см. faq, который я переместил в antlr/antlr4 repo.

Ответ 3

У меня была точно такая же ошибка в Windows. Моя партия сначала устанавливается так:

java -cp "C:\ANTLR\antlr-4.4-complete.jar" org.antlr.v4.runtime.misc.TestRig %*

Оказывается, все мои скомпилированные файлы Hello*.class находятся в текущей папке, и я забыл включить current folder в -cp. После того, как я перейду ниже. Оно работает. Обратите внимание на ведущую точку в -cp.

java -cp ".;C:\ANTLR\antlr-4.4-complete.jar" org.antlr.v4.runtime.misc.TestRig %*

Ответ 4

После того, как все ваши файлы *.java были сгенерированы, и ваши файлы *.class были сгенерированы, а ваш %CLASSPATH% установлен правильно, на основе грамматики примера "Hello World", вы не должны видеть эту ошибку.

Если у вас нет "antlr-runtime-4.4.jar" в вашей переменной среды %CLASSPATH% и запускайте код "grun" из книги, вы получите эту ошибку при запуске созданного анализатора на основе грамматику, которую вы предоставили.

%CLASSPATH% должен быть:

C:\libraries\antlr-4.4-complete.jar;C:\libraries\antlr-runtime-4.4.jar;

Введите ввод после ввода этой команды. Как "привет-паррит" в примере книги. Затем введите CTRL+Z (в Windows), чтобы завершить ввод, или CTRL+D (в Unix).

Ответ 5

Чтобы сделать это правильно, я собираюсь предположить, что у вас установлен JDK и добавлен в переменную PATH системы.

В этом случае вам понадобятся два командных файла.

antlr4.bat:

java -cp antlr-4.2-complete.jar org.antlr.v4.Tool %*

grun.bat:

java -cp .;antlr-4.2-complete.jar org.antlr.v4.runtime.misc.TestRig %*

Это также предполагает, что у вас есть antlr-4.2-complete.jar в текущем каталоге. Помимо этого просто следуйте инструкциям в руководстве по началу работы.

Обратите внимание, что я использовал флаг -cp, потому что в Windows 7 я не вижу переменную CLASSPATH.

Ответ 6

Вам нужен файл Antlr jar и файлы .bat в вашем CLASSPATH. Я знаю, потому что у меня была такая же проблема.

для Windows

Перейдите в меню "Пуск" и найдите Environment Variables, и вы найдете Set Environment Variables for Users или что-то в этом роде. Должен быть раздел с надписью Variables for all Users. Если вы видите %CLASSPATH%, щелкните его, а затем нажмите кнопку edit в этом поле. Перейдите в самый конец списка и добавьте C:\**PATH TO JAR FILE**\antlr-X.X-complete.jar; в конец. Повторите это с помощью пути к каждому из .bat файлов. Если вы не видите %CLASSPATH%, тогда под этим полем нажмите кнопку с надписью add и добавьте %CLASSPATH% и выполните тот же процесс.

OSX

Я не так хорошо знаком с OSX и системой хранения, но вы можете сделать export CLASSPATH="/Users/**USER**/**PATH TO JAR FILE**/antlr-X.X-complete.jar:$CLASSPATH" в терминале. Повторите, но с путями к каждому из .bat файлов. Простой, как мы надеемся. Дайте мне знать, если это неправильно, потому что, как я уже сказал выше, OSX не моя сильная сторона. Вы также можете проверить этот вопрос в StackOverflow: Как я могу навсегда добавить путь к своему терминалу Mac?

Я добавил инструкции OSX на всякий случай, если у кого-то была эта проблема, но на OSX!:)

ТАКЖЕ: Замените X в antlr-X.X-complete.jar номером версии или просто укажите имя файла jar. Независимо от того, что плавает ваша лодка.