Фреймворк-интерпретатор для языка Component Pascal (Oberon/L, КП).
Цель проекта: отвязка языка КП от фреймворка BlackBox.
Компилятор BlackBox Component Builder работает по трехзвенной схеме. Результатом первого этапа работы является абстрактное синтаксическое дерево. Это дерево сохраняется в файл (сейчас это формат GraphML).
Используется компилятор Go и его стандартная библиотека. Так же необходим пакет ypk. Код генерируется в BlackBox, подсистемой Xev.
Исполнение кода из модулей-графов. Перед исполнением структура дерева восстанавливается в памяти интерпретатора. Идентификация узлов сквозная для всех модулей.
Интерпретатор нацеливается на узел входа в модуль и начинает итеративно переходить от узла к узлу по заданным правилам (см. doc/ast.pdf). Каждый новый узел порождает новый уровень глубины стека обработки. Результат обработки узла, если таковой имеется, передается на обработку предыдущему узлу в стеке.
Данные хранятся в трех экземплярах менеджера данных.
- Первый экземпляр - данные модулей, не выгружаются по завершении обработки узла входа в модуль. Таким образом достигается модульность среды исполнения.
- Второй экземпляр - данные процедур, стек, каждый уровень существует, пока интерпретатор не вышел из тела процедуры.
- Третий экземпляр - куча. Данные в ней размещаются динамически, в результате вызова процедуры NEW. Очистка памяти так же автоматическая, используются механизмы языка Go.
Данные в менеджере хранятся организованно, они соответствуют заданным узлам данных.
Одним из основных элементов отвязки языка от конкретного фреймворка является применение процедурных переменных, которые инициализируются фреймворком. Таким образом, в рамках правил языка доступен вызов таких процедурных переменных. Их названия и интерфейс сигнализируют фреймворку об особенностях интерпретации. Такой подход проверен в оригинальном фреймворке и в фреймворке fw.
На данном этапе выполняется интерпретация всех типов узлов, обобщенный механизм допускает появление новых узлов. Узлы с данными так же обрабатываются в полной мере. Менеджер данных поддерживает структурные типы данных КП, но для сложных типов, с наследованием и прочим - возможны ошибки.
Модуль работы с данными пока поддерживает не все типы данных, то есть, операция сложения и другие могут быть не определены для редких типов данных, типа SHORTREAL, но эта ситуация охраняется.
Концепция отвязки от среды позволила наладить процесс написания тестовых модулей для фреймворка прямо в BlackBox, что помогает в процессе разработки. Модуль SYSTEM исключен из рантайма, что позволяет добиться хорошей переносимости кода.
- Отладка работы со сложными типами данных
- Реализация базовых операций для всех типов данных.
- Реализация базовых компонентов по работе с окружающим миром, возможно на основе компонентов BlackBox (Files, Strings).