Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Пример 32




Наследуемые атрибуты

Наследуемые атрибуты представляют собой атрибуты, значения которых в узле дерева разбора определяются атрибутами родительского и/или дочерних по отношению к родитель­скому узлов.

Наследуемые атрибуты удобны для выражения зависимости конструкций языка программирования от контекста, в котором они появляются. Например, наследуемые атрибуты используются для отслеживания, появляется ли идентификатор слева или справа от знака присвоения, чтобы определить, потребуется ли адрес или значение данного иденти­фикатора. Хотя всегда можно переписать синтаксически управляемое определение таким об­разом, чтобы использовать только синтезируемые атрибуты, зачастую более естественно вос­пользоваться синтаксически управляемым определением с наследуемыми атрибутами.

В следующем примере наследуемый атрибут распространяет информацию о типе на различные идентификаторы в объявлении.

Рассмотрим синтаксически управляемое определение, представленное на рис. 51.

Объявление, порождаемое нетерминалом D в синтаксически управляемом определе­нии состоит из ключевого слова int или real, за которым следует список идентификаторов. Нетерминал Т имеет синтезируемый атрибут type, значение которого определяется ключевым словом объявления. Семантическое правило L.in:= T.type, свя­занное с продукцией D → T L, определяет наследуемый атрибут L.in как тип объявления. Затем приведенные правила распространяют этот тип вниз по дереву разбора с использованием атрибута L.in. Правила, связанные с продукциями для L, вызывают процедуру addtype для добавления типа каждого идентификатора к его записи в таблице символов (определяемой атрибутом entry).

Продукция Семантические правила
D → T L L.in:= T.type
T → int T.type:= integer
T → real T.type:= real
L → L 1, id L 1 := L.in
  addtype( id .entry, L.in)
L → id addtype( id .entry, L.in)

Рис. 51. Синтаксически управляемое определение с наследуемым атрибутом L.in

Рис. 52. Дерево разбора с наследуемыми атрибутами in в каждом узле, помеченном L

 

На рис. 52 показано аннотированное дерево разбора для предложения real id1, id2, id3 . Значение L.in в трех L -узлах дает тип идентификаторов id1, id2 и id3. Эти значения определяются вычислением значения атрибута T.type в левом дочернем по отношению к корню узле, а затем вычислением L.in в нисходящем порядке в трех L -узлах правого поддерева корневого узла. В каждом L -узле вызывается также процедура addtype для записи в таблицу символовинформации о том, что идентификатор в правом дочернем узле имеет тип real.




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


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


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



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




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