Работали с формальной системой определения синтаксиса EBNF и генератором парсера ANTLR.
- Повторение *()
- Опциональный оператор ?()
- Конкатенация (),()
- Альтернатива ()|()
- Скобки для группировки ( )
- Однострочные комментарии %
- Многострочные комментарии #{ }#
- Пробельная вложенность - четное количество пробелов (0 пробелов — 0 уровень, 2 пробела — 1, …)
- Идентификаторы — состоит из цифр 0-9, английский букв [a-zA-Z] и нижнего подчеркивания и пробелов между словами, в начале разрешается иметь только букву
- Литералы — цифры, английские буквы и нижнего подчёркивания, в двойных кавычках
- Описание определения : Идентификатор -> определение В правой части пробелы могут быть в любом количестве
- Каждая строка заканчивается символом ;
- Конец файла обозначается символами EOF
- Пустое правило имеет вид rule1 = ;
Язык чувствителен к пробелам. В языке реализована вложенность блоков (по аналогии с языком Python). Следующий уровень вложенность -- 2 пробельных символа. Правила во вложенном блоке являются вспомогательными для правила на уровень выше.
- Скачать ANTLR -- https://github.com/antlr/antlr4/blob/master/doc/getting-started.md
- Скачать модуль для python --
pip install antlr4-python3-runtime
- Генерация парсера --
antlr4 -Dlanguage=Python3 -visitor ebnf.g4
- Передача тестовых файлов --
python3 visitor.py test.txt
- Написана грамматика для языка с помощью ANTLR
- Написан парсер на Python, который строит AST и выводит в текстовом виде
- Обработаны ошибки при парсинге и сделаны проверки на корректность
- Поддержка языка в среде разработки VSCode Реализованы:
- подсветка синтаксиса
- поддержка snippet'ов с автоматической вставкой конструкций языка
- анализ синтаксиса на автодополнение правил, объявленные выше и находящиеся в зоне видимости данного правила
- анализ синтаксиса на использование необъявленных ранее правил
- Написаны тесты для языка