Необходимо написать некоторый упрощенный аналог генератора трансляторов. Рекомендуется брать за основу синтаксис ANTLR или Bison. Рекомендуется для чтения входного файла с грамматикой сгенерировать разборщик с помощью ANTLR или Bison.
Необходимо набрать в сумме хотя бы 35 баллов.
Обязательное требование: должен быть лексический анализатор, не должно быть ограничения, что токен это один символ.
Необходимо из каждого пункта выполнить хотя бы 1 вариант.
- (10 баллов) LL(1)-грамматики, нисходящий разбор - ✔️
- (15 баллов) SLR-грамматики, восходящий разбор
- (20 баллов) LALR-грамматики, восходящий разбор
- (10 баллов) поддержка синтезируемых атрибутов - ✔️
- (10 баллов) поддержка наследуемых атрибутов - ✔️
- (обязательно) сгенерировать с помощью вашего генератора калькулятор - ✔️
- (5 баллов) выполнить с помощью вашего генератора ваше задание второй лабораторной - ✔️
- (10 баллов) выполнить с помощью вашего генератора ваше задание третьей лабораторной
Реализован автоматический генератор парсеров грамматики на основе синтаксиса ANLTR.
Main классом является App. На вход в качестве аргументов или же с консоли генератор получает имя файла грамматики в формате .gram
и путь до директории в которой будет сгенерирован транслятор(ввод в качестве аргументов). Автоматически генерируется Lexer, Parser и класс запускающий сгенерированный транслятор. При желании можно собрать генератор в jar с помощью gradle.
Подробнее:
Полное описание грамматики, которой должен удовлетворять входной файл находится здесь. Для удобства была добавлена поддержка +package
. Дополнительно для выполнения задания добавлен визуализатор дерева из 2-ой лабораторной работы.
Сгенерированные примеры:
-
Калькулятор - реализован калькулятор с операциями
+
,-
,*
,/
, а также в качестве модификации была доделана степень^
. -
Парсер массивов - реализован парсер объявлений массивов в Pascal.(см. Вариант 9 2-ой лабораторной)
Простейшая грамматика объявления массивов.