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


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,$,$).



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