Скрипт compile.py
выполняет компиляцию грамматики в парсер(ы) и, опционально, запускает TestRig
Парсер на Java используется, чтобы запустить визуализацию разбора содержимого input.txt
//TODO Актуализировать
Парсер на Python используется в дальнейшей разработке.
Для работы необходимо наличие antlr-4.7.2-complete.jar
в папке /scripts
(уже включена в репозиторий)
Для работы с Python достаточно JRE, но компиляции в Java, в том числе для визуализации TestRig, должна быть установлена JDK
Запуск скриптов выполняется, находясь в корневом каталоге:
$ cd project_path
$ py compile.py -h
usage: compile.py [-h] [-g grammar] [-l lang [lang ...]] [-r root] [-f] [-t] [-gui]
Скрипт, компилирующий грамматику в парсер
optional arguments:
-h, --help show this help message and exit
-g grammar, -grammar grammar
Имя грамматики [ InputGrammar ]
-l lang [lang ...], -lang lang [lang ...]
Языки для компиляции [ Python3 ]
-r root, -root root Правило, с которого будет начинаться разбор [ root ]
-f, -force Принудительно рекомпилировать грамматику
-t, -test Принудительно запустить тесты
-gui, -gui_test Вывести GUI с деревом разбора (добавит Java к языкам
для компиляции), требует JDK
/custom_parser
- логика над сгенерированными парсерами. Можно наследовать.
/generated_parsers
- [read only] результаты компиляции antlr4, парсеры на разных языках
/grammar
- antlr4-грамматика
/scripts
- Python-скрипты, не используемые в прасинге, но обслуживающие компиляцию
При генерации парсера рядом с ним создается файл hash.md5
, в который ганосится хэш породившей парсер грамматики.
Если не указан флаг -f
, при компиляции перезаписаны будут только те парсеры, чьи хэши отличаются.
Это позволит в дальнейшем запускать тесты только при изменении исходной грамматики, а так же следить за актуальностью парсера.
Скрипт удаляет промежуточные файлы *.interp и *.tokens, генерируемые в /generated_parsers/LANG/
за ненадобностью.
Если они вдруг будут нужны, что маловероятно, поколдуйте над /scripts/parser.py