|
пре 10 година | |
---|---|---|
code | пре 10 година | |
cp | пре 10 година | |
doc | пре 10 година | |
rt2 | пре 10 година | |
utils | пре 10 година | |
xev | пре 10 година | |
.gitignore | пре 10 година | |
.mailmap | пре 10 година | |
LICENSE | пре 10 година | |
README.md | пре 10 година | |
domain.go | пре 10 година | |
fw.go | пре 10 година | |
fw_test.bat | пре 10 година | |
fw_test_all.bat | пре 10 година | |
fw_test_dump.bat | пре 10 година |
Фреймворк-интерпретатор для языка Component Pascal (Oberon/L, КП).
Цель проекта: отвязка языка КП от фреймворка BlackBox.
Компилятор BlackBox Component Builder работает по трехзвенной схеме. Результатом первого этапа работы является абстрактное синтаксическое дерево. Это дерево сохраняется в файл (сейчас это формат GraphML).
Используется компилятор Go и его стандартная библиотека. Так же необходим пакет ypk. Код генерируется в BlackBox, подсистемой Xev.
Исполнение кода из модулей-графов. Перед исполнением структура дерева восстанавливается в памяти интерпретатора. Идентификация узлов сквозная для всех модулей.
Интерпретатор нацеливается на узел входа в модуль и начинает итеративно переходить от узла к узлу по заданным правилам (см. doc/ast.pdf). Каждый новый узел порождает новый уровень глубины стека обработки. Результат обработки узла, если таковой имеется, передается на обработку предыдущему узлу в стеке.
Данные хранятся в трех экземплярах менеджера данных.
Данные в менеджере хранятся организованно, они соответствуют заданным узлам данных.
Одним из основных элементов отвязки языка от конкретного фреймворка является применение процедурных переменных, которые инициализируются фреймворком. Таким образом, в рамках правил языка доступен вызов таких процедурных переменных. Их названия и интерфейс сигнализируют фреймворку об особенностях интерпретации. Такой подход проверен в оригинальном фреймворке и в фреймворке fw.
На данном этапе выполняется интерпретация всех типов узлов, обобщенный механизм допускает появление новых узлов. Узлы с данными так же обрабатываются в полной мере. Менеджер данных поддерживает структурные типы данных КП, но для сложных типов, с наследованием и прочим - возможны ошибки.
Модуль работы с данными пока поддерживает не все типы данных, то есть, операция сложения и другие могут быть не определены для редких типов данных, типа SHORTREAL, но эта ситуация охраняется.
Концепция отвязки от среды позволила наладить процесс написания тестовых модулей для фреймворка прямо в BlackBox, что помогает в процессе разработки. Модуль SYSTEM исключен из рантайма, что позволяет добиться хорошей переносимости кода.