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