Задание 1.2E

Лабораторная №1 — задание 1.2E #

Нужно добавить в репозиторий диаграмму, иллюстрирующую слои вашего будущего компилятора (то есть фазы компиляции):

  1. Лексический анализ — читает исходный код, создаёт поток токенов
  2. Синтаксический анализ — создаёт абстрактное синтаксическое дерево (Abstract Syntax Tree, AST)
  3. Семантический анализ — добавляет аннотации в AST, то есть создаёт аннотированное AST
  4. Генерация промежуточного кода — создаёт трёхадресный код или иное промежуточное представление (Intermediate Representation, IR)
  5. Оптимизация промежуточного кода — оптимизирует (перезаписывает) IR
  6. Генерация машинного кода — создаёт машинный код целевого процессора или байт-код виртуальной машины

Если какие-то этапы будут выглядеть иначе — это следует обозначить на диаграмме. Например, если вы планируете писать компилятор на языке C++ и использовать LLVM, то промежуточным кодом будет LLVM IR.

Порядок выполнения #

  1. Выбрать инструмент для создания диаграмм
    • Mermaid.js — расширяет markdown, позволяя рисовать диаграммы с помощью блоков кода на языке mermaid, поддерживается на Github и во многих других инструментах для работы с Markdown
    • Drawio — графический редактор диаграмм, работающий как в облаке, так и оффлайн (кроссплатформенное Desktop приложение)
  2. Изучить средства создания Flowchart-диаграмм (блок-схем)
  3. В каталоге каталог docs/theory добавить Flowchart-диаграмму (блок-схему) с фазами компиляции

Требования #

Требования к диаграмме:

  1. Все надписи на русском либо английском языке
  2. Каждой фазе соответствует одна фигура с надписью — названием этой фазы
  3. Фазы соединяются стрелками
  4. На каждой стрелке есть надпись — формат данных, соединяющих две фазы компиляции (например, «поток токенов» или «Abstract Syntax Tree»)

Ссылки #

Книги #

  1. «Компиляторы. Принципы, технологии и инструментарий» — Ахо, Лам, Сети, Ульман. Глава 1. Введение в компиляцию.
  2. «Modern Compiler Design» — Grune, Reeuwijk, Bal, Jacobs, Langendoen. 1. Introduction