Компиляторы. Семантический анализ.

 

Контекстно-свободные грамматики, с помощью которых описывают языки программирования, не позволяют задавать контекстные условия, имеющиеся в любом языке.

К контекстным условиям относятся:

1. каждый используемый в программе идентификатор должен быть описан, но не более одного раза в одной зоне описания;

2. при вызове функции число фактических параметров и их типы должны соответствовать числу типов формальных параметров;

3. обычно в языке накладываются ограничения на типы операндов любой операции, определенной в этом языке; на типы левой и правой частей в операторе присваивания, на тип параметра цикла, на тип условия в операторе цикла и условном операторе.

Проверку контекстных условий часто называют семантическим анализом. Его можно выполнить сразу после синтаксического анализа. Некоторые требования можно контролировать во время итерации кода (ограничения на типы операторов в выражении), а можно совместить синтаксический анализ с семантическим.

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

При простых трансляциях семантический анализатор может породить объектный код. Но обычно выходом этой стадии служит некоторая внутренняя форма выполняемой программы, с которой затем компилятор работает на стадии оптимизации.

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

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

Основные функции семантического анализатора, кроме ведения таблиц символов является:

1. включение неявной информации, т.е. информация, задаваемая в программе неявно, должна быть представлена в явном виде в программе низкого уровня;

2. обнаружение ошибок и макрообработка.

 









Дата добавления: 2015-07-30; просмотров: 919;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.