Если вы ищете книгу, Структура и интерпретация компьютерных программ («Книга волшебников») - хорошее место для начала с концепциями интерпретатора. Вы имеете дело только с кодом Scheme, который можно просматривать, оценивать и передавать, как если бы он был AST.
Кроме того, Питер Норвиг имеет короткий пример, объясняющий основную идею использования Python (со множеством других примеров в комментариях), и вот еще один небольшой пример в Википедии.
Как вы сказали, это обход дерева, и, по крайней мере, для вызова по значению это просто: всякий раз, когда вы видите оператор, оцените первый операнд, затем примените оператор. Последнее возвращаемое значение является результатом программы (или оператором, переданным REPL).
Обратите внимание, что вам не всегда нужно явно выполнять обход дерева: вы можете сгенерировать свой AST таким образом, чтобы он принимал посетителя (я думаю, что это делает SableCC), или для очень маленьких языков, таких как небольшие арифметические грамматики используется для демонстрации генераторов синтаксического анализатора, вы можете просто оценить результат во время синтаксического анализа.
Для поддержки объявлений и назначений вам необходимо поддерживать среду. Точно так же, как вы оцениваете «плюс», добавляя операнды, вы также оцениваете имя функции, переменной и т. Д., Просматривая его в среде. Поддержка объема означает, что среда должна обрабатываться как стек и что-то толкать и выталкивать в нужное время. В общем, насколько сложен ваш переводчик, зависит от того, какие языковые функции вы хотите поддерживать. Например, интерпретаторы делают возможным сбор мусора и самоанализ.
Для виртуальных машин: plinth и j_random_hacker описали компьютерное оборудование как своего рода интерпретатор. Обратное также верно - интерпретаторы - это машины; их инструкции более высокого уровня, чем у настоящего ISA. Для интерпретаторов в стиле VM программы фактически напоминают машинный код, а для очень простой машины - albiet. Java bytecode использует всего несколько «регистров», один из которых содержит счетчик программ. Таким образом, интерпретатор виртуальных машин больше похож на аппаратный эмулятор, чем на интерпретаторы в примерах, которые я привел выше.
Но обратите внимание, что по соображениям скорости Oracle JVM по умолчанию работает, переводя прогоны инструкций байт-кода Java в инструкции x86 («как раз во время компиляции»).