Скачиваний:
5
Добавлен:
01.05.2014
Размер:
11.11 Кб
Скачать

part5415 Пред.СтраницаСлед.Страница  Раздел Содержание 5.4.5.  Пример построения АП Следуя приведенному порядку, построим АТ-преобразователь для грамматики Г5.4 и проанализируем его работу. Вначале приведем эту грамматику  к форме простого присваивания. В результате получаем грамматику: Г5.6: <E>%a/b ®  i%x<R>%e/c/d

!! c=x; d=b;a=e;

<R>%e1/c1/d1 ® +{СЛЕДУК}%wi%x{СЛОЖ/f1/g1/h1}<R>%e2/c2/d2

!! f1=c1; g1=x1; (h1,c2)=d1; d2=w;e1=e2;

<R> %e3/c3/d3 ® -{СЛЕДУК}%wi%x{ВЫЧИТ/f2/g2/h2}<R>%e4/c4/d4

!! f2=c3; g2=x2; (h2,c4)=d3; d4=w;e3=e4;

<R>%e5/c5/d5 ® .

!! e5=d5;

1) После удаления атрибутов из грамматики Г5.6 получаем  грамматику Г5.3.

2) Команды преобразователя для грамматики Г5.3 имеют вид: (1)   f*(s0,i,h0)=(s0,h0<E>,$),

(2)   f*(s0,i,<E>)=(s0,<R>i,$),

(3)   f(s0,+,<R>)=(,s0<R>{СЛОЖ}i,$),

(4)   f(s0,-,<R>)=(s0,<R>{ВЫЧИТ}i,$),

(5)   f(s0,.,<R>)=(s0,$,$),

(6)   f(s0,i,i)=(s0,$,$),

(7)   f*(,s0+,{СЛОЖ})=(s0,$,{СЛОЖ}),

(8)   f*(s0,-,{СЛОЖ})=(s0,$,{СЛОЖ}),

(9)   f*(s0,.,{СЛОЖ})=(s0,$,{СЛОЖ})

(10)   f*(s0,+,{ВЫЧИТ})=(s0,$,{ВЫЧИТ}),

(11)   f*(s0,-,{ВЫЧИТ})=(s0,$,{ВЫЧИТ}),

(12)   f*(s0,.,{ВЫЧИТ})=(s0,$,{ВЫЧИТ}),

(13)   f*(s0,e,h0)=(s1,$,$). 3) Для каждой команды, выполняющей запись цепочки символов в магазин, в нашем случае это команды (1)-(5), построим инструкцию, определяющую значения  указателей. Такие инструкции , построенные в соответствии с правилами вычисления значений атрибутов, имеют вид: #1 {ЗАПИСАТЬ(h0ba<E>) b=<начальное значение>} #2 {ЗАПИСАТЬ(dce<R>xi)

STACK[SP-1]=-3

STACK[SP-5]=-2

STACK[SP-3]=-3  } #3 {ЗАПИСАТЬ(d2c2e2<R>h1g1f1{СЛОЖ}x1iw1{СЛЕДУК})

STACK[SP-5]=-8

STACK[SP-3]=-3

STACK[SP-7]=-3

STACK[SP-10]=-4

STACK[SP-1]=-10

STACK[SP-9]=-3  } #4 {ЗАПИСАТЬ(d4c4e4<R>h2g2f2{ВЫЧИТ}x2iw1{СЛЕДУК})

STACK[SP-5]=-8

STACK[SP-3]=-3

STACK[SP-7]=-3

STACK[SP-10]=-4

STACK[SP-1]=-10

STACK[SP-9]=-3  } #5 {STACK[SP-1]=-2; {УДАЛИТЬ(3)}  }

  Содержание символов действия, используемых в инструкциях, можно описать следующим образом :  

{СЛЕДУК} - определяет следующий свободный адрес таблицы значений

                        и присаваивает его своему атрибуту,

{СЛОЖ} - читает из магазина атрибуты, формирует атом, состоящий из

                   знака операции сложения, адресов операндов и результата, и

                   передает атом на выход,

{ВЫЧИТ} -  читает из магазина атрибуты, формирует атом, состоящий из

                   знака операции вычитания, адресов операндов и результата,

                   и передает атом на выход,

{УДАЛИТЬ(3)} - удаляет из вершины магазина три символа. 4) Включая обозначение построенных инструкций в команды преобразователя  и учитывая, что обработка символов действия была включена в правила  работы АП, команды (7) - (12) можно исключить из списка команд. В результате получаем систему команд в виде: (1)   f*(s0,i,h0)=(s0,#1,$),

(2)   f(s0,i,<E>)=(s0,#2,$),

(3)   f(s0,+,<R>)=(s0,#3,$),

(4)   f(s0,-,<R>)=(s0,#4,$),

(5)   f(s0,.,<R>)=(s0,#5,$),

(6)   f(s0, i, i )=(s0,$,$),

(7)   f*(s0,e,h0)=(s1,$,$).

Пред.СтраницаСлед.Страница  Раздел Содержание  

Соседние файлы в папке Формальные языки, грамматики и автоматы