LL(1)-грамматика составного оператора



Пример оператора :

                          begin

                                   if a1>5 then z := 0; goto 55

       else x, y := 0; z := 1

                                          end;

                                          i := 1; S := 0;

                                          while i < 10 do

                                          S := S + i; i := i + 1

end; 

                            55 : M := z + S * (c ^2 –1)

                          end

                                              

1 <SSP> ® begin <SOP> end begin
2 <SOP> ® <OP> <PSOP> CN goto if while ID
3 4 <PSOP> ® ; <OP> <PSOP>       ® e ; else end                  
5 <OP> ® <MT> <NOP> CN goto if while ID
6 7 <MT> ® e       ® CN <PMT> : goto if while ID CN
8 9 <PMT> ® e      ® , CN <PMT> : ,
10 11 12 13 <NOP> ® goto CN      ® if <US> then <SOP> <ELE> end       ® while <US> do <SOP> end       ® ID <PSI> := <W> goto if while ID                              
14 15 <PSI> ® e      ® , ID <PSI> := ,
16 17 <ELE> ® else <SOP>      ® e else end
18 19 <US> ® not <OTN>      ® <OTN> not ID CN (
20 <OTN> ® <W> <ZS> <W> ID CN (
21 22 23 <ZS> ® <      ® >      ® = < > =
24 <W> ® <S> <PW> ID CN (
25 26 27 <PW> ® + <S> <PW>            ® – <S> <PW>            ® e + – ) ] < > = then do end else ;
28 <S>    ® <M> <PS> ID CN (
29 30 31 <PS> ® * <M> <PS>      ® / <M> <PS>      ® e * / + – ) ] < > = then do end else ;
32 <M> ® <PR> <PM>         ID CN (
33 34 <PM> ® ^ <PR> <PM>              ® e ^ * / + – ) ] < > = then do end else ;
35 36 37 <PR> ® ID      ® CN      ® ( <W> ) ID CN (

 

Обозначения в грамматике:

<SSP> – составной оператор,

<SOP> – список операторов,

<PSOP> – продолжение списка операторов,

<OP> – оператор,

<MT> – метки,

<PMT> – продолжение меток,

<NOP> – непомеченный оператор,

<PSI> – продолжение списка идентификаторов,

<ELE> – else–ветвь или пусто ( e ),

<US> – условие,

<OTN> – отношение,

<ZS> – знак сравнения,

<W> – выражение,

<PW> – продолжение выражения,

<S>    – слагаемое,

<PS> – продолжение слагаемого,

<M>  – множитель,

<PM> – продолжение множителя,

<PR> – простейшее (операнд).      

 

_________________________

Приложение 7

LL(1)-грамматика составного оператора с включенными действиями

1 <PRG> ® begin <SOP> end [19] begin
2 <SOP> ® <OP> <PSOP> CN goto if while ID
3 4 <PSOP>® ; <OP> <PSOP>        ® e                           ; else end                  
5 <OP> ® <MT> <NOP>                                 CN goto if while ID
6 7 <MT> ® e                                   ® CN [20] <PMT> :                              goto  if while ID CN
8 9 <PMT> ® e                                  ® , CN [20] <PMT>                               : ,
10 11 12 13 <NOP> ® goto CN [9]                                        ® if <US> [10] then <SOP> <ELE>[12] end       ® while [16] <US> [17] do <SOP> [18] end         ® ID [13] <PSI> := <W> [15] goto if while  ID                              
14 15 <PSI> ® e                                 ® , ID [14] <PSI>               := ,
16 17 <ELE> ® else [11] <SOP>                                   ®                         else end
18 19 <US> ® not <OTN> [7]                                     ® <OTN>                                            not ID CN (
20 <OTN> ® <W> <ZS> [1] <W> [8]                 ID CN (
21 22 23 <ZS> ® <                                                           ® >                                                           ® =                                                    < > =
24 <W> ® <S> <PW>                                      ID CN (
25 26 27 <PW> ® + <S> [2] <PW>                                        ® – <S> [3] <PW>                                        ® e                            + – ) ] < > = then do end else ;
28 <S>    ® <M> <PS>                                      ID CN (
29 30 31 <PS> ® * <M> [4] <PS>                                  ® / <M> [5] <PS>                                  ® e                            * / + – ) ] < > = then do end else ;
32 <M> ® <PR> <PM>                                   ID CN (
33 34 <PM> ® ^ <PR> <PM> [6]                                 ® e                                           ^ * / + – ) ] < > = then do end else ;
35 36 37 <PR> ® ID [1]                        ® CN [1]                                                  ® ( <W> )                               ID      CN (                                         

 

Действия в грамматике:

[1] – сохранить в RSt распознанную ЛЕ;

[2] – сформировать в МИ команду сложения add по двум элементам RSt, для результата выделить временную переменную, сохранить её в RSt;

[3] – сформировать в МИ команду вычитания sub по двум элементам RSt, для результата выделить временную переменную, сохранить её в RSt;

[4] – сформировать в МИ команду умножения mul по двум элементам RSt, для результата выделить временную переменную, сохранить её в RSt;

[5] – сформировать в МИ команду деления div по двум элементам RSt, для результата выделить временную переменную, сохранить её в RSt;

[6] – сформировать в МИ команду возведения в степень exp по двум элементам RSt, для результата выделить временную переменную, сохранить её в RSt;

[7] – сформировать в МИ команду изменения знака inv по одному элементу RSt, для результата выделить временную переменную, сохранить её в RSt;

[8] – сформировать в МИ команду сравнения cmp’u’ по трем элементам RSt (код операции преобразовать из внутренней формы во внешнюю), для результата выделить временную переменную, сохранить её в RSt;

[9] – сформировать в МИ команду безусловного перехода jmp на распознанную константу-метку;

[10] – сформировать в МИ команду условного перехода по ложь j_false по одному элементу RSt (по результату <U>) на очередную внутреннюю метку и сохранить её в RSt ;

[11] – сформировать в МИ команду безусловного перехода jmp на очередную внутреннюю метку, разместить в МИ метку из RSt, сохранить в RSt использованную в команде jmp метку;

[12] – разместить в МИ метку из RSt;

[13] – сохранить ID в RSt, установить внутренний счетчик переменных Cnt = 1 ;

[14] – сохранить ID в RSt, нарастить внутренний счетчик переменных Cnt = Cnt + 1 ;

[15] – сформировать операцию присваивания mov верхнего элемента RSt для Cnt переменных из RSt;

[16] – разместиь в МИ очередную внутреннюю метку и сохранить её в RSt ( как метку начала цикла );

[17] – сформировать в МИ команду условного перехода по ложь j_false по одному элементу RSt на очередную внутреннюю метку и сохранить её в RSt (как метку выхода из цикла );

[18] – извлечь из RSt метку (выхода из цикла) и временно сохранить в пере­менной VMET, сформировать в МИ команду безусловного перехода jmp на метку из RSt (метку начала цикла), разместить в МИ сохранённую в VMET метку;

[19] – сформировать в МИ команду завершения программы end ;

[20] – распознанную константу отметить в таблице констант как метку и разместить в МИ как метку.   

____________________­­­­­

Приложение 8


Дата добавления: 2018-04-05; просмотров: 286; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!