- •Задание
- •Символьный преобразователь
- •Входная грамматика
- •Функции переходов преобразователя
- •Лексический анализатор
- •Грамматика лексических единиц
- •Диаграмма состояний
- •Структуры данных и таблицы
- •Семантика анализа и символы действия.
- •3.5 Спецификация функций
- •3.6 Структура программы
- •Синтаксический анализатор
- •4.1 Неформальное описание семантики
- •4.2 Атрибутная грамматика
- •4.3 Описание символов действия
- •5. Атрибутный преобразователь
4.2 Атрибутная грамматика
<I>A1B1 ::= '{'<Опис.>A2B2 <Опер.>A3B3 '}'
A2=A1;A3=B2;B1=B3
<Массив b>A4B4X1 ::= '<arr>'<Ид.>X2' '<Ч.>Y1{ЗРМ}X3Y2R1R2 <R3>X4R3{ФМБ}A5B5X5'</arr>'
A5=A4;B4=B5;R1=0;R3=R2;(X1,X3,X4,X5)=X2;Y2=Y1
<Массив c>A6B6X6 ::= '<arr>'<Ид.>X7' '<Ч.>Y3{ЗРМ}X8Y4R4R5 <R3>X9R6{ФМЧ}A7B7X10'</arr>'
A7=A6;B6=B7;R4=0;R6=R5;(X6,X8,X9,X10)=X7;Y4=Y3
<R3>X11R7 ::= ' '<Ч.>Y5{ЗРМ}X12Y6R8R9 <R3>X13R10
R8=R7;R10=R9;(X12,X13)=X11;Y6=Y5
<R3>X14R11 ::= $
<Эл. мас.>T1 ::= '<marr>'<Ид.>X15' '<Ч.>Y7{ФСД}X16Y8R12R13P1P2<R4>X17R14P3P4{ФУТЗЭМ}X18P5T2'</marr>'
T1=T2;(X16,X17,X18)=X15;Y8=Y7;P1=0;P3=P2;R12=0;R14=R13;P5=P4
<R4>X19R15P6P7 ::= ' '<Ч.>Y9{ФСД}X20Y10R16R17P8P9<R4>X21R18P10P11
(X20,X21)=X19;Y10=Y9;P8=P6;P10=P9;R16=R15;R18=R17;P7=P11
<R4>X22R19P12P13 ::= $
P13=P12
<Опис.>A8B8 ::= '<bool>'<Тип Bool>A9B9 '</bool>'';'<R5>A10B10
A9=A8;A10=B9;B8=B10
<Опис.>A11B11 ::= '<char>'<Тип Char>A12B12 '</char>'';'<R5>A13B13
A12=A11;A13=B12;B11=B13
<Тип Bool>A14B14::= <Ид.>X23{ВПБ}A15B15X24<R6>A16B16
A15=A14;A16=B15;X24=X23;B14=B16
<Тип Bool>A17B17 ::= <Массив b>A18B18X25<R6>A19B19
A18=A17;A19=B18;B17=B19
<Тип Bool>A20B20 ::= '<ass>'<Класс Bool>A21B21'</ass>'<R6>A22B22
A21=A20;A22=B21;B20=B22
<Класс Bool>A23B23 ::= <Ид.>X26{ВПБ}A24B24X27' '<Константа>Z1{ЗТЗ}X28Z2
A24=A23;B23=B24;(X27,X28)=X26;Z2=Z1
<Класс Bool>A25B25 ::= <Массив b>A26B26X29<Иниц.мас.Bool>X30
A26=A25;B25=B26;X30=X29
<Иниц.мас.Bool>X31 ::= '<iarr>'<Константы>X32'</iarr>'
X32=X31
<Константы>X33 ::= <Константа>Z3{ЗТЗМБ}X34Z4P14P15<R7>X35P16
(X34,X35)=X33;Z4=Z3;P14=0;P16=P15
<R7>X36P17:= ' '<Константа>Z5{ЗТЗМБ}X37Z6P18P19<R7>X38P20
(X37,X38)=X36;Z6=Z5;P18=P17;P20=P19
<R7>X39P21 ::= $
<R6>A27B27 ::= ','<Тип Bool>A28B28
A28=A27;B27=B28
<R6>A29B29 ::= $
B29=A29
<Тип Char>A30B30::= <Ид.>X40{ВПЧ}A31B31X41<R8>A32B32
A31=A30;A32=B31;X41=X40;B30=B32
<Тип Char>A33B33 ::= <Массив c>A34B34X42<R8>A35B35
A34=A33;A35=B34;B33=B35
<Тип Char>A36B36 ::= '<ass>'<Класс Char>A37B37'</ass>'<R8>A38B38
A37=A36;A38=B37;B36=B38
<Класс Char>A39B39 ::= <Ид.>X43{ВПЧ}A40B40X44' '<Символ>C1{ЗТЗ}X45C2
A40=A39;B39=B40;(X44,X45)=X43;C2=C1
<Класс Char>A41B41 ::= <Массив c>A42B42X46<Иниц.мас.Char>X47
A42=A41;B41=B42;X47=X46
<Иниц.мас.Char>X48 ::= '<iarr>'<Символы>X49'</iarr>'
X49=X48
<Символы>X50 ::= <Символ>C3{ЗТЗМЧ}X51C4P22P23<R9>X52P24
(X51,X52)=X51;C4=C3;P22=0;P24=P23
<R9>X53P25 ::= ' '<Символ>C5{ЗТЗМЧ}X54C6P26P27<R9>X55P28
(X55,X56)=X53;C6=C5;P26=P25;P28=P27
<R9>X56P29 ::= $
<R8>A43B43 ::= ','<Тип Char>A44B44
A44=A43;B43=B44
<R8>A45B45 ::= $
B45=A45
<R5>A46B46 ::= <Опис.>A47B47
A47=A46;B46=B47
<R5>A48B48 ::= $
B48=A48
<Опер.>A49B49 ::= '<ass>'<Оп1>T3' '<Л.опер.>A50B50T4{ФAT=}T5T6T7'</ass>';'<R10>A51B51
A50=A49;A51=B50;B49=B51;(T5,T7)=T3;T6=T4
<Оп1>T8 ::= <Ид.>X57{ФУТЗИ}X58T9
T8=T9;X58=X57
<Оп1>T10 ::= <Эл.мас.>T11
T10=T11
<Л.опер.>A52B52T12::= '<and>'<Оп2>A53B53T13' '<Оп2>A54B54T14{ФAT&}T15T16T17{УК}B55B56'</and>'
A53=A52;A54=B53;B52=B56;(T12,T17,B55)=B54;T15=T13;T16=T14
<Л.опер.>A57B57T18::= '<or>'<Оп2>A58B58T19' '<Оп2>A59B59T20{ФATV}T21T22T23{УК}B60B61'</or>'
A58=A57;A59=B58;B57=B61;(T18,T23,B60)=B59;T21=T19;T22=T20
<Л.опер.>A62B62T24 ::= '<not>'<Оп2>A63B63T25{ФАТ!}T26T27T28{УК}B64B65'</not>'
A63=A62;B62=B65;(T24,T28,B65)=B63;T26=T25;T27=NULL
<Оп2>A66B66T29 ::= <Символ>C7
T29=C7;B66=A66
<Оп2>A67B67T30 ::= <Константа>Z7
T30=Z7;B67=A67
<Оп2>A68B68T31 ::= <Л.опер.>A69B69T32
A69=A68;B68=B69;T31=T32
<Оп2>A70B70T33 ::= <Ид.>X59{ФУТЗИ}X60T34
T33=T34;X60=X59;B70=A70
<Оп2>A71B71T35 ::= <Эл.мас.>T36
T35=T36;B71=A71
<R10>A72B72 ::= <Опер.>A73B73
A73=A72;B72=B73
<R10>A74B74 ::= $
B74=A74
При работе нам понадобятся следующие атрибуты:
1. Идентификатор
X-номер идентификатора в таблице идентификаторов
2. Число
Y-номер числа в таблице чисел
3. Константа bool
Z-номер ячейки в таблице констант bool
3. Константа char
C-номер ячейки в таблице констант char
4. Ячеки таблицы значений
A,B-атрибуты для работы с ячейками таблицы значений
A-указывает на очередную свободную ячейку, B-указывает на следующую свободную ячейку.
T-номер ячейки памяти, где хранится данная переменная
5. Массив
R-номер (по порядку) очередного обрабатываемого числа в конструкциях, определяю-щих действие над массивом (его элементами)
P-сдвиг в массиве относительно его начала
Все наследуемые атрибуты предназначены для сборки информации о переменных, операциях. Все наследуемые атрибуты предназначены для реагирования на какие-либо действия (формирование новой переменной, операции).