Skip to content

Latest commit

 

History

History
39 lines (26 loc) · 4.22 KB

README.md

File metadata and controls

39 lines (26 loc) · 4.22 KB

Лабораторная работа №4. Написание автоматического генератора трансляторов

Необходимо написать некоторый упрощенный аналог генератора трансляторов. Рекомендуется брать за основу синтаксис 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-ой лабораторной работы.

Сгенерированные примеры: