Virtual Machines осень 2018

Материал из CSC Wiki
Перейти к:навигация, поиск

Лекции

Иготти Николай Николаевич igotti@gmail.com

Практика

Дедлайн: 17 декабря 23:59

Репозиторий с заданиями — присылайте запросы на почту для добавления в коллабораторы

Для того, чтобы сдать задание нужно закоммитить ваш код в репозиторий (в мастер) до дедлайна, пул-реквесты и прочие сообщения писать не нужно. Результаты будут появляться в табличке.

Код ваших решений будет собираться и запускаться в ubuntu 18.04 на архитектуре x86-64 с пакетами python make g++ libsdl-dev.

Пожалуйста, если меняете файлы не из своей директории, то делайте это отдельным коммитом (желательно с пул реквестом если это нетривиальное изменение).

Практику помогает проверять Акимов Евгений, вопросы по проверке можно задавать на почту geka666 at gmail.com.

Задание 1

Реализовать код для трансформации AST назад в исходный код, автоформаттер.

Ваша программа должна получив на вход программу на языке MathVM (см. гитхаб) вывести эквивалентный исходный код.

Основная цель задания - освоится с окружением и кодовой базой.

Задание 2

Реализовать код для трансформации AST в байткод, который описан в заголовке mathvm.h.

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

Для целей отладки, можно параллельно делать Задание 3, интерпретатор.

Задание 3

Реализовать интерпретатор байткода полученного транслятором в Задании 2, позволяющий исполнять программы на MathVM.

Для тестирования в каталоге tests есть expect файлы, описывающие ожидаемый вывод.

Задание 4

JIT

О домашних заданиях

Настоятельно рекомендуется прочесть README.txt, там есть полезная информация по заданию.

В students/2018/_example есть заготовок решения. Ожидается что после выполнения make в директории с решением будет создан бинарник, который с помощью скрипта тестирования tests/taskN.py будет проходить хотя бы базовые тесты из директории mark3.

Пример запуска решения задания #1 и его результат:

cd students/2018/%username%
make
make test
Test "for" has PASSED
Test "while" has PASSED
Test "mul" has PASSED
Test "add" has PASSED
Test "assign" has PASSED
Test "sub" has PASSED
Test "expr" has PASSED
Test "div" has PASSED
Test "if" has PASSED
Test "literal" has PASSED
Test "bitwise" has PASSED
Test "function" has PASSED