Разработка компиляторов. Ишакова Е.Н. - 24 стр.

UptoLike

Составители: 

24
2.5 Семантический анализатор программы
В ходе семантического анализа проверяются отдельные правила записи
исходных программ, которые не описываются КС-грамматикой. Эти правила
носят контекстно-зависимый характер, их называют семантическими соглаше-
ниями или контекстными условиями.
Рассмотрим пример построения семантического анализатора (СеА) для
программы на модельном языке М. Соблюдение контекстных условий для язы-
ка М предполагает три типа проверок:
1) обработка описаний;
2) анализ выражений;
3) проверка правильности операторов.
В оптимизированном варианте СиА и СеА совмещены и осуществляются
параллельно. Поэтому процедуры СеА будем внедрять в ранее разработанные
процедуры СиА.
Вход: файл лексем в числовом представлении.
Выход: заключение о семантической правильности программы или о типе
обнаруженной семантической ошибки.
Обработка описаний
Задача обработки описаний - проверить, все ли переменные программы
описаны правильно и только один раз. Эта задача решается следующим обра-
зом.
Таблица идентификаторов, введенная на этапе лексического анализа,
расширяется, приобретая вид таблицы 2.1. Описание таблицы идентификаторов
будет иметь вид:
type
tabid = record
id :string;
descrid :byte;
typid :string[4];
addrid :word
end;
var
TI: array[1.. n] of tabid;
Таблица 2.1 – Таблица идентификаторов на этапе СеА
Номер Идентификатор Описан Тип Адрес
1
K
1
Int
2
Sum
0 …
Поле «описан» таблицы на этапе лексического анализа заполняется ну-
лем, а при правильном описании переменных на этапе семантического анализа
заменяется единицей.
     2.5 Семантический анализатор программы

      В ходе семантического анализа проверяются отдельные правила записи
исходных программ, которые не описываются КС-грамматикой. Эти правила
носят контекстно-зависимый характер, их называют семантическими соглаше-
ниями или контекстными условиями.
      Рассмотрим пример построения семантического анализатора (СеА) для
программы на модельном языке М. Соблюдение контекстных условий для язы-
ка М предполагает три типа проверок:
      1) обработка описаний;
      2) анализ выражений;
      3) проверка правильности операторов.
      В оптимизированном варианте СиА и СеА совмещены и осуществляются
параллельно. Поэтому процедуры СеА будем внедрять в ранее разработанные
процедуры СиА.
      Вход: файл лексем в числовом представлении.
      Выход: заключение о семантической правильности программы или о типе
обнаруженной семантической ошибки.
                                     Обработка описаний
      Задача обработки описаний - проверить, все ли переменные программы
описаны правильно и только один раз. Эта задача решается следующим обра-
зом.
      Таблица идентификаторов, введенная на этапе лексического анализа,
расширяется, приобретая вид таблицы 2.1. Описание таблицы идентификаторов
будет иметь вид:
     type
        tabid = record
           id      :string;
           descrid :byte;
           typid :string[4];
           addrid :word
        end;
     var
        TI: array[1.. n] of tabid;
     Таблица 2.1 – Таблица идентификаторов на этапе СеА
      Номер     Идентификатор           Описан      Тип   Адрес
        1             K                   1         Int    …
        2            Sum                  0          …     …
      Поле «описан» таблицы на этапе лексического анализа заполняется ну-
лем, а при правильном описании переменных на этапе семантического анализа
заменяется единицей.

                                                                       24