Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример 31




Синтезируемые атрибуты

Пример 30

На рис. 49 приведено синтаксически управляемое определение программы настоль­ного калькулятора. Это определение связывает с каждым из нетерминалов Е, T и F цело­численный синтезируемый атрибут vаl. Для каждой Е-, Т- и F- продукции семантическое правило вычисляет значение атрибута val нетерминала из левой части продукции по зна­чениям атрибутов нетерминалов правой части.

 

 

Продукция Семантические правила
L → E n print(E.val)
E → E 1 + T E.val:= E 1 val + T.val
E → T E.val:= T.val
T → T 1 * F T.val:= T 1. val × F.val
T → F T.val:= F.val
F → (E) F.val:= E.val
F → digit F.val: = digit.lexval

Рис. 49. Синтаксически управляемое определение простого калькулятора

Лексема digit имеет синтезируемый атрибут lexval, значение которого предоставляется лексическим анализатором. Правило, связанное с продукцией L→En для стартового нетерминала L, представляет собой процедуру вывода значения арифметического выражения, порождаемого E.

В синтаксически управляемом определении предполагается, что терминалы могут иметь только синтезируемые атрибуты, поскольку определение не дает никаких семантических правил для терминалов (обычно значения атрибутов терминалов предоставляются лексическим анализатором). Кроме того, если не оговорено особо, стартовый символ не имеет наследуемых атрибутов.

 

 

Синтезируемые атрибуты часто используются на практике.

S-атрибутным определением называется синтаксически управляемое определение, использующее только синтезируемые атрибуты.

Дерево разбора для S-атрибутного определения всегда может бытьаннотировано путем выполнения семантических правил для атрибутов в каждом узле снизу вверх, от листьев к корню.

S-атрибутное определение в примере 30 описывает калькулятор, считывающий арифметическое выражение из цифр, скобок, операторов + и *, за которым следует символ новой строки n, и выводит значение выражения. Например, получив выражение3*5+4, за которым следует символ новой строки, программа выводит значение 19. Нарис. 50 показано аннотированное дерево разбора для входной строки 3*5+4n. Выход программы, печатаемый в корне дерева, представляет собой значение E.val впервом дочернем узле корня дерева.

Вычисление значений атрибутов производится следующим образом. Крайнему слева снизу внутреннему узлу соответствует использование продукции F → digit. Семантическое правило F.val:= digit .lexval определяет атрибут F.val вэтом узле как имеющийзначение 3, поскольку значение digit. lexval вдочернем узле равно 3. Аналогично вродительском по отношению к данному узлу атрибут T.val также имеет значение 3.

Рис. 50. Аннотированное дерево разбора для 3 *5+4 п

 

Теперь рассмотрим узел продукции Т → Т * F. Значение атрибута Т.vа1 в этом узле определяется следующим образом:

Продукция Семантическое правило

T → T 1 * F T.val:=T 1. val× F.val

При использовании этого семантического правила в данном узле Т 1 .vа1 имеет значе­ние 3, полученное от левого наследника, а F.val — значение 5, полученное от правого наследника. Следовательно, в этом узле Т.val составляет 15.

Правило, связанное с продукцией для стартового нетерминала L → E n, выводит значение выражения, порожденного E.




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 537; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.