4.1. Семантический анализ

Особенности семантики и семантического анализа

Следующий шаг анализа текста программы – семантический, существенно отличается от двух предыдущих – лексического и синтаксического. И дело не столько в том, что фаза семантического анализа реализуется не формальными, а содержательными методами (т.е. на данный момент нет универсальных математических моделей и формальных средств описания «смысла» программы). Лексический и синтаксический анализ имеют дело со структурными, т.е. внешними, текстовыми конструкциями языка. Семантика же, ориентированная на содержательную интерпретацию, имеет дело с внутренним представлением «смысла» объектов, описанных в программе. Для любого, имеющего опыт практического программирования, ясно, что формальные конструкции языка дают описание свойств и действий над внутренними объектами, с которыми имеет дело программа. Для начала перечислим все, что их касается и лежит на поверхности:

 

Семантика программы – внутренняя модель (база данных) множества именованных объектов, с которыми работает программа, с описанием их свойств,  характеристик и связей.

Теперь, когда у нас есть представление о синтаксической фазе, можно оценить ее центральную роль в организации процесса трансляции. Только на уровне синтаксиса текст программы представляет собой единое структурное целое – любое предложение языка сводится к единственному начальному нетерминалу Z. Лексические единицы, как известно, вообще независимы друг от друга и являются терминальными символами синтаксиса. Семантика программы тоже не обладает структурной целостностью и представлена фрагментарно, но при этом связана с синтаксисом следующим образом:

Задача семантического анализа, т.е. «описания смысла» фразы относится скорее к области  искусственного интеллекта. Ее неформализуемость означает, что она  не имеет формальных средств описания, например, языков. Следовательно, семантическая модель языка разрабатывается в каждом случае уникально, здесь отсутствует общий подход, а имеет место набор частных решений и рекомендаций. Отсюда и уникальность семантики языка.

Замечание. Исторически сложилось, что в описание семантической фазы трансляции часто попадают разделы, связанные со структурами данных и алгоритмами их обработки, например, такие как хеширование (размещение и поиск вычислением адреса), двоичный поиск в таблицах. На самом деле они не имеют никакого отношения к основной идее: множества объектов внутреннего представления программы могут быть реализованы и в виде  списков, деревьев и т.п..