interpreter
Собственный язык с лексером, парсером и интерпретацией AST на TypeScript. Исходный pipeline находится в src/index.ts.
Компоненты
Заголовок раздела «Компоненты»| Класс | Вход | Результат |
|---|---|---|
| Lexer | Строка исходного текста | Массив Token |
| Parser | Массив Token в конструкторе | ProgramNode из parse() |
| Interpreter | ASTNode в interpret() | Значение последнего обработанного узла |
Лексер выделяет XML-подобные разделители, ::, $, числа и идентификаторы. Parser направляет XMLTag в объявления классов/функций, PHPVariable — в присваивание, Identifier — в импорт модуля. Типы узлов описаны в src/types.d.ts.
Исполнение AST
Заголовок раздела «Исполнение AST»Program последовательно обрабатывает body. VariableAssignment сохраняет значение в карте переменных; Identifier читает её и выбрасывает ошибку для неизвестного имени; Literal возвращает value. Объявления классов, функций и импортов сохраняются как узлы: interpretClassDeclaration и interpretFunctionDeclaration не вызывают их тела. Для неизвестного типа узла interpret выбрасывает Unknown node type.
src/index.ts принимает ровно один путь к файлу, читает его как UTF-8, строит tokens/AST и печатает результат interpret. Образец синтаксиса находится в test.zorin; он не заменяет определения Parser. Зависимости TypeScript/ts-node заданы в package.json.
Исходный код · AGPL-3.0