Простой способ создать переводчик:
- Определение синтаксического анализатора для языка из его синтаксиса
- Создание абстрактного синтаксического дерева AST
- Применить функцию посетителя, пройти AST в предзаказе и "выполнить" действия, предложенные узлами AST.
Некоторые узлы AST будут «дефиниционными», например, будут объявлять о существовании некоторого именованного объекта, такого как ваша фраза «define proc onA» выше. Обычно действие заключается в том, чтобы связать именованный объект с контентом, например, сформировать триплет > и сохранить его в таблице символов, проиндексированной первой записью. Это облегчает поиск таких определений.
Позже, когда ваш процесс событий встречает событие A, ваше приложение знает, что нужно искать «onA» в этой таблице символов. При обнаружении AST проходит функцию посетителя, чтобы выполнить его содержимое. Обычно вам понадобится стек значений для записи значений промежуточных выражений: листья AST, представляющие операнды (переменные, константы), помещают значения в этот стек, а операторы (+, -, <=) отбрасывают значения и вычисляют новые результаты для отправки. Операции присваивания принимают значение верхнего стека и помещают в таблицу символов, связанную с именем идентификатора. Управляющие операторы (если, делают) снимают значения с вершины стека и используют их, чтобы указать, какую часть программы (например, какое поддерево) следует выполнить следующей. </p>
Все это хорошо известно и встречается в большинстве книг о компиляторах и интерпретаторах. Книга Питера Брауна об этом особенно хороша, хотя она кажется относительно старой:
Написание интерактивных интерпретаторов и компиляторов .