Реальный ответ заключается в том, что языковая семантика управляет переводом.
Ваш исходный и целевой языки имеют синтаксис, а каждый бит синтаксиса имеет семантическую интерпретацию.
Что нужно сделать переводчику, так это найти конфигурацию («патч») синтаксиса на исходном языке и соответствующую конфигурацию синтаксиса на целевом языке, чтобы семантика патча на исходном языке была сохранена. Если вы можете разбить исходную программу на большое количество таких патчей, чтобы каждый патч преобразовывал сохраняющую семантику, а патчи имели согласованные границы, тогда у вас есть перевод. Это довольно абстрактно, и фактическая математика говорит, что это хуже, но интуиция действительно права.
Некоторые инструменты (я создаю один, см. Мою биографию) фактически позволяют вам писать правила перевода, которые выражают именно эти «патчи». Мы можем их "переписать" по правилам; то, что они позволяют вам выразить, это фрагмент синтаксиса на исходном языке и фрагмент синтаксиса на целевом языке, и утверждают, что последний является семантически верным переводом первого. Таким образом, вы можете буквально построить
переводчик, написав большой набор таких правил. [Вы получаете большой набор, потому что реальные языки имеют много синтаксических комбинаций и семантических интерпретаций].
Правила немного сложнее. Прилагается дополнительный произвольный предикат, который проверяет, что семантика действительно сохраняется.
На практике это означает, что чистых синтаксических деревьев недостаточно.
Часто этому предикату необходимо протестировать некоторые концепции, которые нетривиально извлечь из синтаксических деревьев. Вместо того, чтобы создавать чрезвычайно сложные предикаты для извлечения нетривиальных фактов, большинство практических компиляторов делают предварительные вычисления информации, которая облегчает реализацию таких предикатов. Это можно увидеть в реальных компиляторах в виде таблиц символов, графиков управления и потоков данных и других классических структур компиляторов.
Если вы спросите, я могу предоставить некоторые ссылки на примеры, но они относятся к нашим инструментам.