Skip to content

Latest commit

 

History

History

03-bison-antlr

Лабораторная работа №3. Использование автоматических генераторов анализаторов Bison и ANTLR

Введение

Цель данной лабораторной работы — научиться пользоваться автоматическими генераторами анализаторов Bison и ANTLR. Форма отчетности: программа и текстовый отчет. Средство автоматической генерации вы можете выбрать самостоятельно. Рекомендуемые источники:

http://www.gnu.org/software/bison — Bison

http://www.antlr.org — ANTLR

Вариант 4. Функциональный язык

Придумайте примитивный функциональный язык программирования и реализуйте его трансляцию в императивный язык. Пример:

fac :: Integer -> Integer
     fac 0 = 1
     fac n | n > 0 = n * fac(n - 1)

Вывод:

function fac(n: integer): integer;
     begin
     if n = 0 then
     fac := 1
     else if n > 0 then
     fac := n * fac(n - 1);
     end;

Решение:

Реализован траслятор подмножества языка Haskell - для работы с числами в императивный язык. В качестве императивного языка выбран C++.

Main классом является App. На вход в качестве аргументов или же с консоли парсер получает имя входного файла, также можно указать имя выходного файла. Если имя выходного файла указано, то будет создан .cpp файл с исходным кодом после трансляции,затем собран с указанным именем и запущен. При этом после в качестве входных данных с консоли принимается имя функции и ее аргументы, которая будут вызвана в файле трансляции в блоке main. Если имя выходного файла отсуствует или не введено, то код после трансляции будет выведен в консоль. При желании можно собрать парсер в jar с помощью gradle.

Грамматика ANTLR

Пример файла .hs

Пример файла после трансляции