Формально процесс семантического анализа и синтеза объектной программы реализует преобразование синтаксического дерева программы на входном языке в текст эквивалентной формы объектной программы. При этом синтаксический анализ обычно чередуется с семантическим. Сначала синтаксический анализатор идентифицирует последовательность лексем, формируя синтаксическую единицу — выражение, оператор, вызов программы и т.д., затем распознанная синтаксическая единица (структура) обрабатывается семантическим анализатором.
Семантический анализатор обычно разделяется на ряд более мелких семантических анализаторов — семантических подпрограмм, каждая из которых предназначается для обработки одного конкретного типа программной конструкции. Например, описания массивов могут обрабатываться одним анализатором, арифметические выражения — другим, а оператор условного перехода — третьим и т.д.
Для простых трансляций результатом работы семантического анализатора может быть и объектная программа, но, как правило, выходом семантического анализатора является некоторая внутренняя форма выполняемой программы — промежуточная программа. При этом, обычно, промежуточная программа порождается по частям и поэтому, как правило, чрезвычайно неэффективна и требует проведения оптимизации прежде, чем по ней будет выполнятся генерация объектной программы.
Семантический анализатор наиболее зависимая от языка программирования часть транслятора, поэтому подходы и способы построения семантического анализатора могут существенно отличаться для различных языков программирования. И все же практически для любого языка программирования во время семантического анализа необходимо реализовать следующие основные функции:
· выполнить проверку семантических (контекстных) условий в программе;
· осуществить распределение памяти;
· провести синтез промежуточной (объектной) программы.
В качестве вспомогательной функции реализуется функция ведения таблицы идентификаторов.