|
|
blackbox:dev [2017/05/01 23:12] иван_денисов |
blackbox:dev [2020/10/29 07:08] |
====== Подсистема Dev ====== | |
Подсистема ''Dev'' содержит в себе компилятор и средства отладки. | |
Компилятор реализован на основе переносимого компилятора **Оберона** {{bb:op2.paper.pdf}} (оригинал: [[ftp://ftp.ethoberon.ethz.ch/Oberon/OberonV4/Docu/OP2.Paper.ps.gz|OP2]]). | |
| |
====== Описание ====== | |
Компилятор выполнен по трехфазной схеме, с возможностью смены кодогенератора под конкретную платформу без смены //парсера// и //AST-дерева//((AST --- abstract syntacsis tree (абстрактное синтаксическое дерево). Служит хранению текста программы в промежуточном состоянии между исходным текстом и машинным кодом. Это не байт-код. Исполнять нельзя. Но AST-дерево даёт гарантию, что код программы корректный (иначе нельзя получить такое дерево), и позволяет привести к машинному коду на нужной платформе, что сильно облегчает портирование программ)).\\ | |
Предполагается, что смена платформы происходит путем подмены модуля ''DevCompilerXxx'', который после успешного завершения процесса создания //AST-дерева// передает результат сменному бэкенду ''DevCPVxxx''. | |
| |
====== Модули компилятора ====== | |
| |
===== DevCompiler ===== | |
''DevCompiler'' - командный модуль, подготавливает текст модулей для компиляции. А еще подготавливает опции компиляции и некоторые глобальные значения других модулей компилятора. Существует так же в версиях ''DevCompilerO2'', ''DevCompiler68k''. | |
| |
===== DevCPM ===== | |
''DevCPM'' - от слова **M**achine, определяет машинно-зависимые константы, тип процессорной архитектуры. Работает с символьными файлами непосредственно, знает их формат, пишет и читает их. | |
Обрабатывает модификаторы в квадратных скобках для процедур, параметров и типов данных. Предопределяет свойства будущего кода. Для модулей компилятора предоставляет сервис отслеживания ошибок и чтения стандартной текстовой модели. | |
| |
===== DevCPP ===== | |
''DevCPP'' - от слова **P**arser, //парсер// модулей. Использует сервис ''CPS'', и по результатам работы вызывает функции ''CPT'' и ''CPB'' для сохранения результатов. | |
| |
===== DevCPS ===== | |
DevCPS - от слова **S**canner, низкоуровневый сканер текста модулей. Дополнительно занимается преобразованием текста в числовые значения, проверяет их в CPM. | |
| |
===== DevCPT ===== | |
[[bb:dev:cpt|DevCPT]] - от слов Symbol **T**able, определяет типы данных, которые описывают все сущности компилируемого модуля. Во время компиляции содержит в себе дерево сущностей AST topScope. Определяет встроенные типы языка, встроенные процедуры модуля SYSTEM, встроенные процедуры языка. | |
| |
===== DevCPB ===== | |
''DevCPB'' - от слов Tree **B**uilder, реализует набор "скриптовых" процедур по работе с модулем ''CPT'', заодно проверяет //валидность// констант, используется для упрощения генерации **AST**. | |
| |
===== DevCPE ===== | |
''DevCPE'' - от слова **E**mitter, занимается генерацией кодового файла. | |
| |
===== DevCPH ===== | |
DevCPH - похоже, что от слова **H**elper, выполняет какие-то утилитарные функции для помощи CPT486. В оригинальном документе OP2 не указан. | |
| |
===== DevCPV486 ===== | |
''DevCPV486'' - от слова Tra**v**erser, обходчик получившегося дерева **AST**. Выполняет обход и анализ синтаксического дерева. В результате этого генерирует код для конкретной платформы с помощью ''CPL486'' и ''CPC486''. Записывает полученный код в кодовый файл модуля с помощью ''CPE''. Так же есть в вариантах ''CPV68k''. | |
| |
===== DevCPC486 ===== | |
''DevCPC486'' - от слов **C**ode Generator. Занимается генерацией сложного кода, управляет стеком, регистрами, структурой данных в памяти, работой с **FPU**, использует сервисы ''CPL486''. Так же есть в вариантах ''CPC68k''. | |
| |
===== DevCPL486 ===== | |
''DevCPL486'' - от слов **L**ow-level generator, генерирует инструкции процессора. Так же есть в вариантах **CPL68k**. | |
| |
===== Другое ===== | |
Известны так же //модули-декодеры// ''DevDecXXX'' кода разных платформ, **x86**, **68k**, **ARM**, **PPC**, декодер формата Exe. | |
''DevTranslator'' - похоже может перевести C код в код на обероне. | |
''DevRemDebug'' - пошаговый отладчик | |