Устанавливаем зависимости:
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()-- реализовать