Трёхадресный код
2025-05-27 13:49![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Я в раздумьях. Парсер отлично генерит AST. Пора превращать его в TAC, то есть так называемый трёхадресный код. Структуры для TAC я сгенерил (tac.h). Вот их визуализация.

По сути, трехадресный код представляет собой абстрактный язык ассемблера — последовательность простых инструкций, использующих один унарный или бинарный оператор и не более трех адресов памяти: один для результата и два для аргументов. Но не такой уж абстрактный: TAC в курсе устройства оперативной памяти, а также размеров и формата чисел в хардвере. И не такой уж ассемблер: TAC имеет строгую систему типов.
После TAC следующим этапом Си-компилятора будет кодогенератор. То есть превращение в реальный ассемблерный код целевой машины. Но сначала имеет смысл отладить TAC сам по себе. Добиться получения правильного TAC из AST. Как его проверять? Неужели строить симулятор абстрактной TAC-машины. И ассемблер к ней понадобится. Чтобы писать программы на TAC непосредственно, без помощи компилятора.
По сути, трехадресный код представляет собой абстрактный язык ассемблера — последовательность простых инструкций, использующих один унарный или бинарный оператор и не более трех адресов памяти: один для результата и два для аргументов. Но не такой уж абстрактный: TAC в курсе устройства оперативной памяти, а также размеров и формата чисел в хардвере. И не такой уж ассемблер: TAC имеет строгую систему типов.
После TAC следующим этапом Си-компилятора будет кодогенератор. То есть превращение в реальный ассемблерный код целевой машины. Но сначала имеет смысл отладить TAC сам по себе. Добиться получения правильного TAC из AST. Как его проверять? Неужели строить симулятор абстрактной TAC-машины. И ассемблер к ней понадобится. Чтобы писать программы на TAC непосредственно, без помощи компилятора.
no subject
Date: 2025-05-28 00:08 (UTC)no subject
Date: 2025-05-28 00:36 (UTC)no subject
Date: 2025-05-28 02:15 (UTC)no subject
Date: 2025-05-28 05:48 (UTC)no subject
Date: 2025-05-28 02:17 (UTC)no subject
Date: 2025-05-28 07:04 (UTC)no subject
Date: 2025-05-28 03:23 (UTC)