Задание 1. Интерпретатор μLua

Требуется реализовать интерпретатор модельного языка программирования «μLua».

Срок выполнения

До 7 ноября 04:00.

Пример использования

mulua run factorial.lua
stdin
4
stdout
24
factorial.lua
n = input()
result = 1
while n > 0 do
    result = result * n
    n = n - 1
end
print(result)

Инструкция по выполнению

  1. Ознакомьтесь с инструментами и материалами, а также описанием μLua.

  2. Воспользуйтесь заготовкой проекта на Reason. В заготовке проекта уже есть git-репозиторий с первым коммитом.

    Код заготовки можно модифицировать как угодно.

    Для сборки и запуска исполняемого файла воспользуйтесь командой dune exec mulua.

  3. Напишите приемочные тесты в директории examples, предварительно ознакомившись с использованием Cram-тестов в Dune.

    Первым делом не забудьте исправить некорректный тест на factorial.lua.

    В тестах должно использоваться не менее 15 различных программ на μLua, использующих различные синтаксические конструкции.

  4. Выполните задание:

    • В библиотеке mulua.syntax опишите абстрактный синтаксис языка.

    • В библиотеке mulua.parser реализуйте лексический анализатор и парсер (написав грамматику).

    • В библиотеке mulua.semantics реализуйте интерпретатор.

  5. Убедитесь в прохождении всех приемочных тестов командой dune test.

Сдача задания

  1. Настройте ваши идентификационные данные в git, если они еще не настроены.

    Полное имя принято указывать в порядке first + last.

    Пример настройки:

    git config --global user.name "Arthur Khashaev"
    git config --global user.email arthur@khashaev.ru

    Пожалуйста, укажите ваше настоящее имя, чтобы было понятно, кому ставить оценку.

  2. Зарегистрируйтесь на хостинге GitLab.com, если у вас нет там аккаунта.

  3. Установите в профиле GitLab настоящее имя, аналогично настройке user.name в git, чтобы не пришлось гадать, кто сделал задание.

  4. Воспользуйтесь заготовкой проекта с начальным коммитом в ветке master.

  5. Создайте новый закрытый репозиторий на GitLab.

    При создании выбирайте «пустой проект» и снимите галочку «Initialize repository with a README», чтобы в созданном репозитории не было вообще никаких коммитов.

  6. Настройте удаленный репозиторий в локальном и отправьте ветку master с начальным коммитом из заготовки проекта.

  7. Пригласите пользователя @Invizory в ваш репозиторий, предоставив роль Maintainer.

  8. Создайте и переключитесь на ветку (например, interpreter), в которой вы будете вести разработку. В ветке master при этом должен остаться только начальный коммит.

  9. Выполните задание согласно формулировке.

  10. Создайте запрос на слияние и назначьте его на проверяющего.

  11. В случае наличия замечаний, их опубликуют в качестве комментариев к запросу на слияние, после чего вы сможете их учесть. Задание считается полностью выполненным тогда и только тогда, когда проверяющий выполнит слияние вашего кода с веткой master.