Не могу разобрать исходный код COBOL с Antlr4

Я учусь тому, как использовать Antlr4 для разбора исходных кодов COBOL. В настоящее время я следую за шагами, в точности как продемонстрировал Энам Бисвас в своем видео на Youtube.

В основном я скачал antlr-4.7.1-complete.jar и поместил его в C:\Javalib, Да, я также включил путь в свою среду Windows и создал antlr.bat а также grun.bat файлы.

Для файлов грамматики я использую Cobol85.g4 и Cobol85Preprocessor.g4, которые были взяты из github Ульриха Вольфганга. В то же время я использую пример исходного кода HellowWorl.cbl, чтобы увидеть, как работает синтаксический анализ.

После запуска antlr.batЯ выполнил команду ниже:

C:\Users\ffa\Desktop\COBOL>grun Cobol85Preprocessor startRule HellowWorld.cbl

В результате я получил сообщение об ошибке, как показано ниже:

Warning: TestRig moved to org.antlr.v4.gui.TestRig; calling automatically
Can't load Cobol85.g4 as lexer or parser

Поскольку я не уверен, почему я не могу разобрать его, как показано на видео, я также попытался выполнить следующие команды:

C:\Users\ffa\Desktop\COBOL>grun Cobol85 startRule HellowWorld.cbl

а также

C:\Users\ffa\Desktop\COBOL>grun Cobol85* startRule HellowWorld.cbl

В конце концов, я все еще получаю то же сообщение об ошибке. Итак, я сделал поиск через Google и нашел предложение скачать antlr-runtime-4.7.1.jar, Итак, я скачал файл и поместил его в тот же каталог, который находится по адресу C:\Javalib,

Когда я выполнил команды выше, на этот раз я получил другое сообщение

Error: Could not find or load main class org.antlr.v4.runtime.misc.TestRig

Может ли кто-нибудь помочь мне разобрать исходный код COBOL с Antlr4? Было бы также хорошо, если бы кто-то мог объяснить разницу между Cobol85.g4 а также Cobol85Preprocessor.g4,

2 ответа

Решение

Отказ от ответственности: я являюсь автором этих файлов грамматики COBOL ANTLR4.

Парсер, сгенерированный из грамматики Cobol85.g4 должен быть снабжен исходным кодом COBOL, который был предварительно обработан препроцессором COBOL. Cobol85Preprocessor.g4 лежит в основе этого препроцессора и позволяет анализировать такие выражения, как COPY REPLACE, EXEC SQL и т.п.

Cobol85Preprocessor.g4 предполагается дополнить довольно обширной дополнительной логикой, которая не включена в файлы грамматики и позволяет нормализовать форматы строк, разрывы строк, строки комментариев, записи комментариев, EXEC SQL, EXEC CICS и так далее.

Парсер ProLeap COBOL, написанный мной, реализует все это на Java на основе файлов Cobol.g4 и Cobol85Preprocessor.g4.

В вашей консоли перейдите в новый каталог и выполните следующие действия:

1. Загрузите банку ANTLR:

wget http://www.antlr.org/download/antlr-4.7.1-complete.jar

(или просто загрузите его, если wget недоступно на вашей консоли)

2. Загрузите грамматику COBOL:

wget https://raw.githubusercontent.com/antlr/grammars-v4/master/cobol85/Cobol85.g4

3. Загрузите исходный файл COBOL:

wget https://raw.githubusercontent.com/uwol/cobol85parser/master/src/test/resources/io/proleap/cobol/ast/HelloWorld.cbl

4. Сгенерируйте все классы лексеров и анализаторов.java из грамматики COBOL:

java -jar antlr-4.7.1-complete.jar Cobol85.g4

5. Скомпилируйте все исходные файлы.java:

javac -cp antlr-4.7.1-complete.jar *.java

6. Загрузите исходный файл COBOL в сгенерированный лексер / парсер

... и дать парсеру команду начать с startRule правило:

java -cp .;antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig Cobol85 startRule -gui < HelloWorld.cbl

(* nix пользователи, делайте java -cp .:antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig Cobol85 startRule -gui < HelloWorld.cbl)

Если < не работает на Windows, просто сделайте это:

java -cp .;antlr-4.7.1-complete.jar org.antlr.v4.gui.TestRig Cobol85 startRule -gui

Подсказка теперь будет молчать. Он пишет для вас, чтобы ввести какой-то источник для анализа. Когда вы закончите вводить некоторый код на языке COBOL, завершите работу с помощью CTRL+Z (* nix пользователи делают CTRL+D).

Вот и все.

Теперь на вашу консоль выведены некоторые ошибки, означающие, что парсер COBOL не может правильно проанализировать исходный файл. Имеет ли это какое-то отношение к тому, что сначала делает что-то с препроцессором, или к неверному вводу, я не знаю.

Другие вопросы по тегам