Студопедия

КАТЕГОРИИ:


Архитектура-(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 грамматического символа справа.

 

Продукция Семантические правила
A → L M L.i:= l(A.i)
  M.i:= m(L.s)
  A.s:= f(M.s)
A → Q R R.i:= r(A.i)
  Q.i:= q(R.s)
  A.s:= f(Q.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; Просмотров: 558; Нарушение авторских прав?; Мы поможем в написании вашей работы!


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



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




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