Я могу дать вам общее представление о том, как работает мой переводчик, возможно, он может дать вам общее представление. Хотя ответ довольно поздний, я надеюсь, что это может помочь кому-то еще, кто зашел в эту ветку и хочет получить общую идею.
- Для каждой введенной строки схемыКомандный объект создан.Если команда является частичной, то сохраняется уровень ее гнезда (количество оставшихся правых скобок для завершения выражения).Если команда завершена, объект Expression создан и для этого объекта запущены оценщики.
- Определено 4 типа классов оценщика, каждый из которых получен из базового класса Evaluator
a) Define_Evaluator: для определений операторов
b) Funcall_Evaluator: для обработки других пользовательских функций
c) Read_Evaluator: для чтения выражения и преобразования его в объект схемы
d) Print_Evaluator: печатает объект в зависимости от типа объекта.
e) Eval_Evaluator: выполняет фактическую обработку выражения.
3 .-> Сначала каждое выражение читается с использованиемПрочитайте Evaluator, который создаст объект схемы из выражения.Вложенные выражения вычисляются рекурсивно до тех пор, пока выражение не будет завершено.
-> Далее запускается Eval_Evaluator, который обрабатывает объект выражения схемы, сформированный на первом шаге.это происходит так
a) если вычисляемое выражение является символом.Верните его значение.Поэтому переменная blk вернет объект для этого блока.
b), если вычисляемое выражение является списком.Распечатайте список.
c) если вычисляемое выражение является функцией.Найдите определение функции, которая будет возвращать оценку, используя Funcall_Evaluator.
-> Наконец, оценщик печати запускается для печати результата, эта печать будет зависеть от типа выходного выражения.
Отказ от ответственности: Так работает мой переводчик, так не должно быть.