КАТЕГОРИИ: Архитектура-(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) |
Пример 38
Схемы трансляции Пример 37 L-атрибутные определения Другой класс синтаксически управляемых определений - L-атрибутные определения. Синтаксически управляемое определение является L-атрибутным, если каждый наследуемый атрибут символа Xj,1 ≤ j ≤ п, из правой части продукции А → X 1 X 2 ...Xn зависит только от 1. атрибутов символов X 1, X 2 ,..., Xj-1, расположенных в продукции слева от Xj-1; 2. наследуемых атрибутов А. Например, каждое S-атрибутное определение является L-атрибутным, так как ограничения (1) и (2) относятся только к наследуемым атрибутам. Синтаксически управляемое определение на рис. 58 не является L-атрибутным, поскольку наследуемый атрибут Q.i грамматического символа Q зависит от атрибута R.s грамматического символа справа.
Рис. 58. Синтаксически управляемое определение, не являющееся L-атрибутным Другой способ записи семантических правил – это схемы трансляции. Для определения трансляции используем процедурную спецификацию. Схема трансляции – это контекстно-свободная грамматика, в которой атрибуты, связанные с символами грамматики, и семантические действия заключены в фигурные скобки ({ }) и вставлены в правые части продукций. Схемы трансляции являются удобным способом записи определения трансляции, выполняемой в процессе синтаксического анализа. Схемы трансляции имеют как наследуемые, так и синтезируемые атрибуты. Схема трансляции подобна СУ-определению, однако здесь явно указан порядок применения семантических правил. Выполнение семантических правил указывается с помощью фигурных скобок в правой части продукции. Схема трансляции, преобразующая инфиксные выражения со сложением и вычитанием в соответствующие постфиксные выражения. E → TR R → addop T { print (addop. lexeme)} R1 | λ T → num { print (num. val)} На рис. 59 показано дерево разбора для входной строки 9-5+2, на котором семантические действия показаны как дочерние узлы по отношению к узлам, представляющим левые части соответствующих продукций. По сути, действия рассматриваются как терминальные символы, что удобно для определения момента выполнения этих действий. Вместо лексем num и addop указываются реальные числа и операция сложения. При выполнении действий в порядке обхода в глубину действия на рис. 59 приводят к выводу 95-2 +. При разработке схемы трансляции необходимо соблюдать некоторые ограничения для того, чтобы гарантировать, что значение атрибута доступно при обращении к нему. Эти ограничения, накладываемые L-атрибутными определениями, гарантируют, что действие не использует атрибут, который еще не вычислен.
Рис. 59. Дерево разбора с семантическими действиями для выражения 9-5+2 Простейший случай — когда используются только синтезируемые атрибуты. В этом случае можно построить схему трансляции просто путем создания действий для каждого семантического правила, состоящих из присвоения, и размещения этих действий в конце правой части связанных продукций. Например, продукция Т → T 1 * Fи семантическое правило T 1 .vа1:= T 1val × F.val дают следующую продукцию и семантическое действие. T → T 1* F { T.vаl:= T1.val × F.val} Если имеются и синтезируемые, и наследуемые атрибуты, необходимо соблюдать следующие правила. 1. Наследуемый атрибут для символа из правой части продукции должен вычисляться в действии перед этим символом. 2. Действие не должно обращаться к синтезируемому атрибуту символа справа от действия. 3. Синтезируемый атрибут для нетерминала в левой части продукции может вычисляться только после того, как будут вычислены все атрибуты, от которых он зависит. Действие, вычисляющее такой атрибут, обычно может размещаться в конце правой части продукции. Например, следующая схема трансляции не удовлетворяет первому из трех требований. S → A 1 А 2 { А 1 .iп:= 1; А2.iп:= 2 } А → а {print(А. in)} При попытке вывести его значение в процессе обхода в глубину дерева разбора входной строки аа наследуемый атрибут А.in во второй продукции не определенОбход в глубину начинается в S и проходит поддеревья A 1 и А2 до того, как устанавливаются значения A 1 .iп и А2.in. Если действие, определяющее значения A 1 .iп и A 2 .iп, вставить перед символами А в правой части продукции S— > A 1 А2, то А.in будет определено при каждом вызове print(А. in). Начав с L-атрибутного синтаксически управляемого определения, всегда можно построить схему трансляции, удовлетворяющую трем приведенным выше требованиям.
Дата добавления: 2014-12-27; Просмотров: 587; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |