Не могу разобрать исходный код 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 не может правильно проанализировать исходный файл. Имеет ли это какое-то отношение к тому, что сначала делает что-то с препроцессором, или к неверному вводу, я не знаю.