Вступление
Цели семантического анализа
Слово - текст компьютерной программы
- Проверка корректности программы на более глубоком уровне, чем обычный анализ средствами контекстно-свободных грамматик
- Сбор и систематизация дополнительной информации о программе
- Атрибутная грамматика - расширение контекстно-свободной грамматики
Основные понятия
Грамматический символ
В грамматике грамматическим символом называется элемент из множества
Link to original
Атрибут грамматического символа
Атрибутом грамматического символа называется параметр, приписанный и имеющий название (идентификатор)
Всякому грамматическому символу может соответствовать конечное множество его атрибутов (возможно пустое)
Один и тот же атрибут может быть приписан к разным грамматическим символам (важно совпадение его имени)
Link to originalТак как атрибут является параметром, он должен обладать значением. Значение атрибута вычисляется “динамически” с привязкой к слову, подвергаемому семантическому анализу
Домен атрибута грамматического символа
Область значений атрибута грамматического символа
Link to original
Для терминального символа в качестве атрибута используется только его лексическое значение, хранимое в таблице символов. Имя такого атрибута может быть, например lexval. Тогда факт, что терминальный символ имеет атрибут с именем записывают следующим образом через точку:
Для нетерминального символа, например его атрибут с именем может быть записан аналогично:
Семантическое правило
Семантическим правилом, поставленным в соответствие правилу вывода контекстно-свободной грамматики , , называется функциональная зависимость
- атрибуты грамматических символов из множества
Link to originalДля каждого правила грамматики существует конечное (возможно пустое) множество семантических правил
Выделяют 2 класса атрибутов: синтезируемые и наследуемые
flowchart Атрибут --> Синтезируемый Атрибут --> Наследуемый
Синтезируемый атрибут
Атрибут символа называется синтезируемым, если он вычисляется по семантическому правилу*
поставленным в соответствие правилу вывода в КС-грамматике
- атрибуты символов, принадлежащих символам из цепочки
Link to original
Наследуемый атрибут
Атрибут символа называется наследуемым, если он вычисляется по семантическому правилу*
поставленному в соответствие правилу вывода
- атрибуты символов, принадлежащих символам из цепочек и символу
Link to original
Атрибутная грамматика
Атрибутной грамматикой называется набор из трех элементов:
Link to original
- Контекстно-свободная грамматика
- Множество атрибутов
- Множество семантических правил
Замечание: Грамматику можно преобразовать в атрибутную многими способами
Контекстно-свободная грамматика легко достраивается до атрибутной добавлением в набор пустого множества атрибутов и пустого множества семантических правил
Аннотированное дерево вывода слова
Аннотированным деревом вывода слова атрибутной грамматики называется дерево вывода слова в грамматике , где каждому узлу дерева соответствует список значений атрибутов грамматического символа
Link to original
Замечание:
В аннотированном дереве синтезируемый атрибут зависит от значений атрибутов сыновей узла . Следовательно, значения всех синтезируемых атрибутов вычисляются снизу-вверх. Наследуемый атрибут зависит от значений атрибутов отца узла , или от значений атрибутов братьев узла . Следовательно, его значение вычисляется либо «сверху-вниз», либо комбинированным способом обхода дерева.
Пример построения атрибутной грамматики
стр. 186 из учебного пособия А.Ф. Шура и А.П. Замятина
В качестве КС-грамматики возьмем
В качестве множества атрибутов:
- - значение арифметического выражения
- - лексическое значение
В качестве множества семантических правил (принято записывать в виде таблицы):
| Номер правила вывода | Правило вывода | Семантическое правило |
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | ||
| 4 | ||
| 5 | ||
| 6 |
Пример построения аннотированного дерева по атрибутной грамматике
По атрибутной грамматике , построенной выше, построим аннотированное дерево вывода арифметического выражения

Аннотированное дерево вывода слова
