Задание 1. Интерпретатор μLua
Требуется реализовать интерпретатор модельного языка программирования «μLua».
Пример использования
mulua run factorial.lua
4
24
n = input()
result = 1
while n > 0 do
result = result * n
n = n - 1
end
print(result)
Инструкция по выполнению
-
Ознакомьтесь с инструментами и материалами, а также описанием μLua.
-
Воспользуйтесь заготовкой проекта на Reason. В заготовке проекта уже есть git-репозиторий с первым коммитом.
Код заготовки можно модифицировать как угодно.
Для сборки и запуска исполняемого файла воспользуйтесь командой
dune exec mulua
. -
Напишите приемочные тесты в директории
examples
, предварительно ознакомившись с использованием Cram-тестов в Dune.Первым делом не забудьте исправить некорректный тест на
factorial.lua
.В тестах должно использоваться не менее 15 различных программ на μLua, использующих различные синтаксические конструкции.
-
Выполните задание:
-
В библиотеке
mulua.syntax
опишите абстрактный синтаксис языка. -
В библиотеке
mulua.parser
реализуйте лексический анализатор и парсер (написав грамматику). -
В библиотеке
mulua.semantics
реализуйте интерпретатор.
-
-
Убедитесь в прохождении всех приемочных тестов командой
dune test
.
Сдача задания
-
Настройте ваши идентификационные данные в git, если они еще не настроены.
Полное имя принято указывать в порядке first + last.
Пример настройки:
git config --global user.name "Arthur Khashaev" git config --global user.email arthur@khashaev.ru
Пожалуйста, укажите ваше настоящее имя, чтобы было понятно, кому ставить оценку.
-
Зарегистрируйтесь на хостинге GitLab.com, если у вас нет там аккаунта.
-
Установите в профиле GitLab настоящее имя, аналогично настройке
user.name
в git, чтобы не пришлось гадать, кто сделал задание. -
Воспользуйтесь заготовкой проекта с начальным коммитом в ветке
master
. -
Создайте новый закрытый репозиторий на GitLab.
При создании выбирайте «пустой проект» и снимите галочку «Initialize repository with a README», чтобы в созданном репозитории не было вообще никаких коммитов.
-
Настройте удаленный репозиторий в локальном и отправьте ветку
master
с начальным коммитом из заготовки проекта. -
Пригласите пользователя @Invizory в ваш репозиторий, предоставив роль Maintainer.
-
Создайте и переключитесь на ветку (например,
interpreter
), в которой вы будете вести разработку. В веткеmaster
при этом должен остаться только начальный коммит. -
Выполните задание согласно формулировке.
-
Создайте запрос на слияние и назначьте его на проверяющего.
-
В случае наличия замечаний, их опубликуют в качестве комментариев к запросу на слияние, после чего вы сможете их учесть. Задание считается полностью выполненным тогда и только тогда, когда проверяющий выполнит слияние вашего кода с веткой
master
.