Skip to content

Python scripts for automated compilation and testing of antlr4 grammar, python wrappers around generated classes

License

Notifications You must be signed in to change notification settings

daihaminkey/atlr4-grammar-compiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Компилятор грамматик

Что делает скрипт

Скрипт 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

Скрипт удаляет промежуточные файлы *.interp и *.tokens, генерируемые в /generated_parsers/LANG/ за ненадобностью. Если они вдруг будут нужны, что маловероятно, поколдуйте над /scripts/parser.py

About

Python scripts for automated compilation and testing of antlr4 grammar, python wrappers around generated classes

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published