Содержание

Подсистема Dev

Подсистема Dev содержит в себе компилятор и средства отладки. Компилятор реализован на основе переносимого компилятора Оберона op2.paper.pdf (оригинал: OP2).

Описание

Компилятор выполнен по трехфазной схеме, с возможностью смены кодогенератора под конкретную платформу без смены парсера и AST-дерева1).
Предполагается, что смена платформы происходит путем подмены модуля DevCompilerXxx, который после успешного завершения процесса создания AST-дерева передает результат сменному бэкенду DevCPVxxx.

Модули компилятора

DevCompiler

DevCompiler - командный модуль, подготавливает текст модулей для компиляции. А еще подготавливает опции компиляции и некоторые глобальные значения других модулей компилятора. Существует так же в версиях DevCompilerO2, DevCompiler68k.

DevCPM

DevCPM - от слова Machine, определяет машинно-зависимые константы, тип процессорной архитектуры. Работает с символьными файлами непосредственно, знает их формат, пишет и читает их. Обрабатывает модификаторы в квадратных скобках для процедур, параметров и типов данных. Предопределяет свойства будущего кода. Для модулей компилятора предоставляет сервис отслеживания ошибок и чтения стандартной текстовой модели.

DevCPP

DevCPP - от слова Parser, парсер модулей. Использует сервис CPS, и по результатам работы вызывает функции CPT и CPB для сохранения результатов.

DevCPS

DevCPS - от слова Scanner, низкоуровневый сканер текста модулей. Дополнительно занимается преобразованием текста в числовые значения, проверяет их в CPM.

DevCPT

DevCPT - от слов Symbol Table, определяет типы данных, которые описывают все сущности компилируемого модуля. Во время компиляции содержит в себе дерево сущностей AST topScope. Определяет встроенные типы языка, встроенные процедуры модуля SYSTEM, встроенные процедуры языка.

DevCPB

DevCPB - от слов Tree Builder, реализует набор «скриптовых» процедур по работе с модулем CPT, заодно проверяет валидность констант, используется для упрощения генерации AST.

DevCPE

DevCPE - от слова Emitter, занимается генерацией кодового файла.

DevCPH

DevCPH - похоже, что от слова Helper, выполняет какие-то утилитарные функции для помощи CPT486. В оригинальном документе OP2 не указан.

DevCPV486

DevCPV486 - от слова Traverser, обходчик получившегося дерева AST. Выполняет обход и анализ синтаксического дерева. В результате этого генерирует код для конкретной платформы с помощью CPL486 и CPC486. Записывает полученный код в кодовый файл модуля с помощью CPE. Так же есть в вариантах CPV68k.

DevCPC486

DevCPC486 - от слов Code Generator. Занимается генерацией сложного кода, управляет стеком, регистрами, структурой данных в памяти, работой с FPU, использует сервисы CPL486. Так же есть в вариантах CPC68k.

DevCPL486

DevCPL486 - от слов Low-level generator, генерирует инструкции процессора. Так же есть в вариантах CPL68k.

Другое

Известны так же модули-декодеры DevDecXXX кода разных платформ, x86, 68k, ARM, PPC, декодер формата Exe. DevTranslator - похоже может перевести C код в код на обероне. DevRemDebug - пошаговый отладчик

1)
AST — abstract syntax tree (абстрактное синтаксическое дерево). Служит хранению текста программы в промежуточном состоянии между исходным текстом и машинным кодом. Это не байт-код. Исполнять нельзя. Но AST-дерево даёт гарантию, что код программы корректный (иначе нельзя получить такое дерево), и позволяет привести к машинному коду на нужной платформе, что сильно облегчает портирование программ