Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задания (ЛА+СА+СемА).doc
Скачиваний:
3
Добавлен:
08.08.2019
Размер:
93.18 Кб
Скачать

Семантический анализатор

Очередной(третий) шаг в конструировании Вашего компилятора - это разработка семантического анализатора (СемА) для подмножества языка ПАСКАЛЬ. СемА должен:

1. Завершить проверку корректности программы, начатую на этапах ЛА и СА:

а) осуществить контроль типов в выражениях и операторе присваивания;

б) реализовать контроль использования имен в рамках одного блока: отсутствие дубликатов имен (т.е., отсутствие повторного объявления имени); обязательное объявление имени перед его использованием; использование имени в соответствии с его объявлением.

2. Собрать информацию, необходимую для генерации кода:

а) сформировать таблицу атрибутов

- для выражений конструкторов типа

- для имен переменных

- для значений и имен констант;

б) построить Абстрактное Дерево Разбора.

Результатами СемА являются:

- диагностика семантических ошибок

- обновленная таблица лексем (таблица атрибутов)

- абстрактное дерево разбора.

Результаты должны быть в наглядном виде предоставлены проверяющему.

СемА представляет собой набор семантических действий, вызываемых по мере прохождения СА. Сем. действия вызываются после чтения не каждой лексемы, а лишь после "важной", значимой с точки зрения СемА лексемы. Решает какая лексема "важна", какая нет - разработчик СемА. Обычно "важные" лексемы - это ID, константы, знаки операций (имена действий) и некоторые, но не все ключевые слова.

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

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

5