Семантический анализатор
Очередной(третий) шаг в конструировании
Вашего компилятора - это разработка
семантического анализатора
(СемА) для подмножества языка
ПАСКАЛЬ. СемА должен:
1. Завершить проверку корректности
программы, начатую на этапах ЛА и СА:
а)
осуществить контроль типов в выражениях
и операторе присваивания;
б)
реализовать контроль использования
имен в рамках одного блока: отсутствие
дубликатов имен (т.е., отсутствие
повторного объявления имени); обязательное
объявление имени перед его использованием;
использование имени в соответствии с
его объявлением.
2. Собрать информацию,
необходимую для генерации кода:
а)
сформировать таблицу атрибутов
-
для выражений конструкторов типа
-
для имен переменных
-
для значений и имен констант;
б)
построить Абстрактное Дерево Разбора.
Результатами СемА являются:
-
диагностика
семантических ошибок
-
обновленная таблица
лексем (таблица атрибутов)
- абстрактное дерево разбора.
Результаты должны быть в наглядном виде
предоставлены проверяющему.
СемА представляет собой набор семантических
действий, вызываемых по мере прохождения
СА. Сем. действия вызываются после чтения
не каждой лексемы, а лишь после "важной",
значимой с точки зрения СемА лексемы.
Решает какая лексема "важна", какая
нет - разработчик СемА. Обычно "важные"
лексемы - это ID,
константы, знаки операций (имена действий)
и некоторые, но не все ключевые слова.
Как правило, встретив "важную"
лексему, находящуюся в начале или
середине правой части правила,
семантическое действие накапливает
необходимую информацию в одном или
нескорльких Семантических Стеках. По
достижении конца правой части правила
накопленная информация обрабатывается
семантическим действием.
Т.о. для того, чтобы разработать СемА,
вначале нужно расставить метки-обозначения
сем. действий по "важным" символам
правых частей правил грамматики, а затем
проставить в соответствующих местах
СА вызовы семантических процедур и
функций.
5