Скачиваний:
9
Добавлен:
01.05.2014
Размер:
1.43 Mб
Скачать

5.2. Реализация перевода восходящими методами

Восходящий анализатор можно расширить действиями по выполнению перевода, если перевод определяется постфиксной транслирующей грамматикой. Модификация анализатора заключается в том, что операция свертки расширяется действиями, описываемыми операционными символами соответствующего правила грамматики. Это можно сделать потому, что при обработке входной цепочки момент времени выполнения свертки для каждого правила совпадает с моментом выполнения действий по переводу для этого правила. Хотя входная грамматика для нашего примера и относится к классу SLR(1)-грамматик, построенные для нее транслирующая, а также атрибутная транслирующая грамматика, не являются постфиксными.

Преобразовать в постфиксную форму следует правило (1) путем введения дополнительного нетерминала Z:

(1) F Zp1,p2,p3,p4 do Op {кон_ц}q1,q2,q3,q4

q1 p1 (p1 – имя переменной цикла)

q2 p2 (p2 – синтезированный атрибут для обозначения направления изменения переменной цикла)

q3 p3 (p3 – метка начала цикла); q4 p4 (p4 – метка конца цикла)

(2) Zq5,q6,q7,q8 for i n:= Ev1 Sp Ev2 {нач_ц}q1,q2,q3,q4,m1,m2

q1, q5 n (n – имя переменной цикла)

q2 v1 (v1 – синтезированный атрибут, начальное условие цикла)

q3, q6 p (p – синтезированный атрибут для обозначения направления изменения переменной цикла)

q4 v2 (v2 – синтезированный атрибут, конечное условие цикла) m1,m2 NewLabel() (m1 – метка начала цикла, m2 – метка конца цикла)

q7 m1; q8 m2

(3) Sq top

q p (p = inc)

(4) Sq downtop

q p (p = dec)

(5) Eq сp

q p (p – значение константы)

(6) Op i p1:= cp2 {Присвоить}q1,q2

q1 p1 (p1 – имя переменной); q2 p2 (p2 – значение константы)

(7) Op F

Управляющая таблица SLR(1)-анализатора для данной грамматики представлена на рис. 5.8 (функция переходов) и рис. 5.9 (функция действий).

В S-атрибутном ДМП-процессоре каждый магазинный символ имеет конечное множество полей для представления атрибутов. Примем, что магазинный символ с n атрибутами представляется в магазине n + 1 полями, верхнее из которых содержит имя символа, а остальные – значения атрибутов. Поля магазинного символа заполняются значениями атрибутов в момент вталкивания символа в магазин и не изменяются до момента выталкивания его из магазина. Операция переноса расширяется таким образом, что значения атрибутов переносимого входного символа помещаются в соответствующие поля вталкиваемого при переносе магазинного символа.

F

Z

E

S

Op

for

i

:=

c

to

downto

do

F0

Z1

do1

do1

F7

Op1

for2

i6

Op1

for2

i2

i2

:=2

:=2

E21

c5

E21

S2

to3

downto4

S2

E22

c5

E22

to3

downto4

c5

i6

:=6

:=6

c6

c6

F7

F0

Z1

for2

Рис. 5.8

В начальной конфигурации в магазине находится только маркер дна. При переносе первых символов в магазин будет получена конфигурация, представленная на рис. 5.10.

При свертке для правила с номером i, верхние символы магазина представляют правую часть i-гo правила вывода входной грамматики, a поля магазинных символов содержат значения атрибутов соответствующих символов грамматики. Расширенная операция свертки использует эти значения для вычисления значений всех атрибутов операционных символов, связанных с правилом вывода транслирующей грамматики, и значений всех атрибутов нетерминала из левой части правила. Значения атрибутов операционных символов используются для выдачи результатов или выполнения других действий, определяемых этими символами. Атрибуты нетерминала из левой части правила вывода записываются в соответствующие поля магазинного символа, который представляет этот нетерминал и вталкивается в магазин при свертке (рис. 5.11 – 5.15).

for

i

:=

c

to

downto

do

F0

Д

Z1

П

do1

П

П

Op1

С,1

for2

П

i2

П

:=2

П

E21

П

П

S2

П

E22

С,2

to3

С,3

downto4

С,4

c5

С,5

С,5

С,5

i6

П

:=6

П

c6

С,6

F7

С,7

П

Рис. 5.9

Окончательно при свертке к нетерминалу Z по правилу (2) можно сформировать заголовок цикла, а необходимые значения атрибутов сохранить при вталкивании нетерминала в магазин (рис. 5.16).

c5

E21

do3

S2

1

1

inc

inc

:=2

:=2

E21

E21

i2

i2

1

1

K

K

:=2

:=2

for

for

i2

i2

K

K

Рис. 5.10

Рис. 5.11

for

for

Рис. 5.12

Рис. 5.13

c5

E22

Z

10

10

K

S2

S2

inc

inc

inc

m1

E21

E21

m2

1

1

:=2

:=2

Рис. 5.16

i2

i2

K

K

for

for

Рис. 5.14

Рис. 5.15

Список литературы

  1. Алгоритмический язык АЛГОЛ-60. Модифицированное сообщение /Пер. с англ. М.: Мир, 1982.

  2. Ахо А., Ульман Дж. Теория синтаксического анализа, перевода и компиляции: В 2 т. Т. 1/ Пер. с англ. М.: Мир, 1978.

  3. Братчиков И.Л. Синтаксис языков программирования. М.: Наука, 1975.

  4. Опалева Э.А., Самойленко В.П. Формальные грамматики и распознающие автоматы: Учеб. пособие /ЛЭТИ. Л., 1991.

  5. Льюис Ф., Розенкранц Д., Стирнз Р. Теоретические основы проектирования компиляторов /Пер. с англ. М.: Мир, 1979.

  6. Кнут Д. Семантика контекстно-свободных языков //Семантика языков программирования/Пер. с англ. М.: Мир, 1980. C.137-161.

  7. Льюис Ф., Розенкранц Д., Стирнз Р. Атрибутные трансляции //Семантика языков программирования /Пер. с англ. М.: Мир, 1980. C.162-195.

  8. Опалева Э.А., Самойленко В.П. Построение трансляторов компилирующего типа: Учеб. пособие /ЛЭТИ. Л., 1981.

21

Соседние файлы в папке Формальные методы описания перевода(1)