Устанавливаем зависимости:
npm ci
Запуск:
node --es-module-specifier-resolution=node --loader ts-node/esm run.js
Запуск всех тестов:
npm test
- Откройте файл теста
- В разделе запуска/отладки (слева вверху) переключитесь на
Jest Current
- Далее на любом открытом файле текста последовательно нажимите
Ctrl+Shift+D
и затемEnter
Интерпретатор работает как конвейер, передавая промежуточный результат следующему модулю:
- Модуль ввода-вывода (МВВ)
FileIO
-- разбивает исходных текст на отдельные буквы. - Лексический анализатор (ЛА)
LexicalAnalyzer
-- из букв строит слова программы. - Синтаксический анализатор (СА)
SyntaxAnalyzer
-- строит дерево выполнения. - Движок
Engine
-- выполняет дерево, полученное изSyntaxAnalyzer
, это и есть процесс выполнения программы.
Можно сравнить эту структуру интерпретатора с возможной структурой компилятора: http://fkn.ktu10.com/?q=node/12395
ДАС - дерево абстрактного синтаксиса, структура, которая строится СА на основе исходной программы,
потом это структуру будет выполнять Движок Engine
.
SyntaxAnalyzer/Tree/
- директория хранит описания типов узлов для ДАС
Тесты:
- Логический тип - есть
- Логические операции -- есть
- Порядок арифм. операций -- есть
- Массивы (в т.ч. многомерные, ключи как числа, символы, диапазоны enum) -- есть
- Пользовательские процедуры -- есть
- Пользовательские функции -- есть
- Константы --есть
- Типы (секция type - псевдонимы типов) -- есть
Оперативно:
- Поддержка result для возврата значения из функции
- Проверка типов (+ раскомментировать реальный тест
tests/__tests__/custom_subprograms/procedures/procedure_base/procedure_base.js
) - read() & readln()
Несрочно:
- "Index is out of range" -- добавить подробности - какой именно индекс и в каком диапазоне
- Процедура
val()
-- реализовать