Лабораторная №1 — задание 1.2E #
Нужно добавить в репозиторий диаграмму, иллюстрирующую слои вашего будущего компилятора (то есть фазы компиляции):
- Лексический анализ — читает исходный код, создаёт поток токенов
- Синтаксический анализ — создаёт абстрактное синтаксическое дерево (Abstract Syntax Tree, AST)
- Семантический анализ — добавляет аннотации в AST, то есть создаёт аннотированное AST
- Генерация промежуточного кода — создаёт трёхадресный код или иное промежуточное представление (Intermediate Representation, IR)
- Оптимизация промежуточного кода — оптимизирует (перезаписывает) IR
- Генерация машинного кода — создаёт машинный код целевого процессора или байт-код виртуальной машины
Если какие-то этапы будут выглядеть иначе — это следует обозначить на диаграмме. Например, если вы планируете писать компилятор на языке C++ и использовать LLVM, то промежуточным кодом будет LLVM IR.
Порядок выполнения #
- Выбрать инструмент для создания диаграмм
- Mermaid.js — расширяет markdown, позволяя рисовать диаграммы с помощью блоков кода на языке
mermaid, поддерживается на Github и во многих других инструментах для работы с Markdown - Drawio — графический редактор диаграмм, работающий как в облаке, так и оффлайн (кроссплатформенное Desktop приложение)
- Mermaid.js — расширяет markdown, позволяя рисовать диаграммы с помощью блоков кода на языке
- Изучить средства создания Flowchart-диаграмм (блок-схем)
- В каталоге каталог
docs/theoryдобавить Flowchart-диаграмму (блок-схему) с фазами компиляции
Требования #
Требования к диаграмме:
- Все надписи на русском либо английском языке
- Каждой фазе соответствует одна фигура с надписью — названием этой фазы
- Фазы соединяются стрелками
- На каждой стрелке есть надпись — формат данных, соединяющих две фазы компиляции (например, «поток токенов» или «Abstract Syntax Tree»)
Ссылки #
Книги #
- «Компиляторы. Принципы, технологии и инструментарий» — Ахо, Лам, Сети, Ульман. Глава 1. Введение в компиляцию.
- «Modern Compiler Design» — Grune, Reeuwijk, Bal, Jacobs, Langendoen. 1. Introduction