Введение 5
1. Обзор 7
1.1. Язык РуСи 7
1.2. Компилятор РуСи 7
1.3. LLVM 8
1.4. Компилятор РуСи в LLVM 9
1.5. Clang 9
2. Документация для платформы MIPS и таблица трансляций из РуСи в MIPS 10
2.1. Общие сведения 10
2.2. АЛУ для работы с целочисленными регистрами 10
2.3. АЛУ для работы с переменными с плавающей запятой 11
2.4. Таблица трансляции 11
3. Реализация компилятора 14
3.1. Структура программы на языке РуСи 14
3.2. Структура компилятора 14
3.3. Работа с регистрами 16
3.4. Недостатки реализации 16
3.5. Поддержка РуСи 17
3.6. Отладка и симулятор MARS 17
3.6.1. Тестирование работоспособности 18
3.7. Дальнейшая работа над компилятором 18
4. Сравнение с аналогами 19
4.1. Сравнение результирующего кода 19
4.1.1. Поиск элемента в массиве 19
4.1.2. Умножение матриц 19
4.1.3. Выводы 20
4.2. Сравнение времени работы компилятора 21
4.2.1. Поиск элемента в массиве 22
4.2.2. Умножение матриц 22
4.2.3. Выводы 22
Заключение 23
Список литературы 24
Создание компилятора для языка программирования — большая и сложная задача. Написание компилятора требует обращения к таким темам, как языки программирования, архитектура компьютера, теория языков, алгоритмы, разработка программного обеспечения[10].
Для упрощения реализации компилятора существует множество методов, одним из которых является создание промежуточных представлений. Такой подход является достаточно успешным в связи с тем, что, несмотря на разнообразие целевых платформ, множество частей нового компилятора можно взять из предыдущей разработки. При этом такую инфраструктуру необходимо дополнять недостающими частями — трансляторами из языка высокого уровня в промежуточное представление, а так же промежуточного представления в коды целевой платформы.
Язык РуСи является языком программирования, разрабатываемым на кафедре системного программирования математико-механического факультета Санкт-Петербургского государственного университета. РуСи предназначен для обучения программированию учеников школ и преподавания студентам СПбГУ курса по трансляции языков программирования. Данный проект находится в стадии развития и в данный момент имеет компилятор в коды виртуальной машины, а также интерпретатор данной виртуальной машины. Проекту недостаёт компиляторов в целевые платформы.
Одной из таких недостающих частей является компилятор для платформы MIPS[4][3]. MIPS — архитектура, получившая широкое распространение как одна из первых ЯКС^архитектур, до сих пор активно используется, в том числе в качестве архитектуры для новых платформ. Создание компилятора языка РуСи в MIPS будет способствовать более широкому распространению языка, покажет на примере, как разрабатываются компиляторы, а также упростит создание дальнейших компиляторов в платформы на RISC-архитектуре, такие как ARM1 и SPARC2.
Предметом данной работы является реализация компилятора языка РуСи в MIPS на основе существующего компилятора языка РуСи.
Постановка задачи
Целью данной работы является создание компилятора из языка РуСи в конечные коды платформы MIPS. Для достижения данной цели были сформулированы следующие задачи.
1. Разработать русскоязычную документацию платформы MIPS и таблицу трансляций из кодов РуСи в коды MIPS, достаточную для реализации компилятора.
2. Реализовать оптимизирующий компилятор из языка РуСи в платформу MIPS.
3. Провести сравнение компилятора с существующими аналогами.
В рамках данной квалификационной работы были достигнуты следующие результаты.
1. Разработана документация платформы MIPS и приведены примеры трансляции кода на языке РуСи на платформу MIPS.
2. Реализован компилятор языка РуСи для платформы MIPS.
3. Произведено сравнение компилятора с аналогами.
Код проекта доступен на сайте:
https://github.com/CepGamer/RuC-MIPS.
[1] Appel Andrew W. Modern compiler implementation in C.— Cambridge university press, 2004.
[2] C. Lattner. C Language Family Frontend for LLVM. — URL: http: //clang.llvm.org.
[3] D. Sweetman. See MIPS run. — Morgan Kaufmann, 2007.
[4] J. Heinrich. MIPS R4000 Microprocessor User’s manual.- MIPS technologies, 1994.
[5] Lattner C. Adve V. LLVM Language Reference Manual. — URL: http: //llvm.org/docs/LangRef.html.
[6] Lattner C. Adve V. LLVM: A Compilation Framework for Lifelong Program Analysis and Transformation. — University of Illinois at UrbanaChampaign, 2004.
[7] Vollmar K., Sanderson P. MARS: an education-oriented MIPS assembly language simulator. — 2006. — Vol. 38, no. 1. — P. 239-243.
[8] Болотов С. Создание транслятора из РуСи в LLVM IR.— 2015.— URL: http://se.math.spbu.ru/SE/YearlyProjects/spring-2015/ list.
[9] Керниган Б., Ритчи Д. Язык программирования С. — Невский диалект СПб., 2001.
[10] Компиляторы: принципы, технологии и инструменты / А. Ахо, Р. Сети, Д. Ульман, М. Лам. — Вильямс, 2008.