- •Транслирующая грамматика
- •C) Функии переходов преобразователя и пример его работы
- •Пример работы преобразователя
- •Лексический анализатор
- •A) Грамматика лексических единиц и структура лексем
- •B) Матрица переходов лексического анализатора
- •D) Структура программы лексического анализатора и пример его работы
- •C) Описание символов действия
- •D) Атрибутная грамматика в окончательном виде
- •E) Вывод в атрибутной грамматике
- •B) Построение инструкций а-преобразвателя
- •C) Фрагмент работы а-преобразователя
- •Заключение
B) Построение инструкций а-преобразвателя
#0 {
STACK last first <PROGRAM>
[SP-1]= START
}
#1 {
POP
STACK last first ‘{’ last1 first1 <MAIN_BLOCK> ‘}’ “main()”
[SP-4]=-3
[SP-5]=-3
}
#2 {
POP
STACK last first ‘;’ last1 first1 <LIST_IDENT_I> “int”
[SP-2]=-3
[SP-3]=-3
}
#3 {
POP
STACK last first ‘;’ last1 first1 <LIST_IDENT_F> “float”
[SP-2]=-3
[SP-3]=-3
}
#4 {
POP
STACK last first last1 first1 <LIST_IDENT_I> ‘,’
[SP-1]=-2
[SP-2]=-2
}
#5 {
POP
STACK last first last1 first1 <LIST_IDENT_F> ‘,’
[SP-1]=-2
[SP-2]=-2
}
#6 {
POP
STACK last first ‘}’ last1 first1 <BODY> ‘{’
[SP-1]=-3
[SP-2]=-3
}
#7 {
POP
STACK rslt 1op last first DEST 2op 1op1 {#(+)#} cell last2 first2 {new_cell} rslt1 last1 first1 <R_EQUATION> ‘+’
[SP-2]=-11
[SP-3]=-3
[SP-10]=-5
[SP-4]=-7
[SP-8]=-4
[SP-8]=-8
[SP-7]=-7
}
#8 {
POP
STACK end_lbl beg_lbl last first end_lbl1 beg_lbl1 last2 first2 <CONT_HEAD> last1 first1 <EQUATION> “for(”
[SP-2]=-7
[SP-3]=-2
[SP-6]=-4
[SP-7]=-4
[SP-8]=-4
}
#9 {
POP
STACK end_lbl beg_lbl last first last2 first2 <CCONT_HEAD> cond end_lbl1 {#(JMP_DOWN_FALSE)#} lbl {make_lbl} rslt last1 first1 <CONDITION2> beg_lbl1 {#(LABEL)#} ‘;’
[SP-8]=-2
[SP-8]=-10
[SP-4]=-11
[SP-5]=-8
[SP-14]=-2
[SP-6]=-5
[SP-2]=-15
}
#10 {
POP
STACK last first ‘)’ last1 first1 <CONDITION3> ‘;’
[SP-2]=-3
[SP-3]=-3
}
#11 {
POP
STACK rslt 1op last first dest 2op 1op1{#(>)#} {new_cell} cell last1 first1 {new_cell} #CONST <CONSTANT> ‘>’
[SP-4]=-8
[SP-5]=-8
[SP-9]=-5
[SP-1]=-9
[SP-6]=5
[SP-6]=9
}
#12 {
POP
STACK last first ‘{’ last1 first1 <DEF_VAR>
[SP-2]=-3
[SP-3]=-3
}
#13 {
POP
STACK last first last2 first2 <CONTINUE> last1 first1 <VAR>
[SP-1]=-5
[SP-2]=-2
[SP-5]=-2
}
#14 {
POP
STACK last first last2 first2 <CONT_VAR> last1 first1 <DEFINE_CONSTANT>
[SP-1]=-5
[SP-2]=-2
[SP-5]=-2
}
#15 {
POP
STACK last first last2 first2 <C_L_I_I> name last1 first1 {new_int} #NAME <IDENTIFICATOR>
[SP-1]=-4
[SP-4]=-3
[SP-8]=-2
[SP-3]=-4
}
#16 {
POP
STACK last first last2 first2 <C_L_I_F> name last1 first1 {new_float} #NAME <IDENTIFICATOR>
[SP-1]=-4
[SP-4]=-3
[SP-8]=-2
[SP-3]=-4
}
#17 {
POP
STACK last first last1 first1 <BLOCK>
[SP-1]=-2
[SP-2]=-2
}
#18 {
POP
STACK ‘}’ last first last2 first2 <CONT_BODY> last1 first1 <START>
[SP-1]=-5
[SP-2]=-2
[SP-5]=-2
}
#19 {
POP
STACK last first ‘;’ last1 first1 <EQUATION>
[SP-1]=-3
[SP-2]=-3
}
#20 {
POP
STACK last first last1 first1 <FOR>
[SP-1]=-2
[SP-2]=-2
}
#21 {
POP
STACK last first dest source {#(=)#} rslt last1 first1 <R_EQUATION> ‘=’ #ID <IDENTIFICATOR>
[SP-4]=-6
[SP-6]=-2
[SP-1]=-8
[SP-5]=-6
}
#22 {
POP
STACK rslt last first rslt1 1op last1 first1 <CONT_R_EQUATION> #ID <IDENTIFICATOR>
[SP-3]=-4
[SP-1]=-4
[SP-4]=-4
[SP-6]=-3
}
#23 {
POP
STACK rslt last first rslt1 1op last1 first1 <CONT_R_EQUATION> #CONST <CONSTANT>
[SP-3]=-4
[SP-1]=-4
[SP-4]=-4
[SP-6]=-3
}
#24 {
POP
STACK last first ‘;’ end_lbl1 {#(LABEL)#} beg_lbl1 {#(JMP_UP)#} last2 first2 <BLOCK> end_lbl beg_lbl last1 first1 <HEAD> lbl {make_lbl}
[SP-1]=-4
[SP-1]=-10
[SP-3]=-12
[SP-6]=-7
[SP-4]=-4
[SP-9]=-7
}
#25 {
POP
STACK rslt last first rslt1 1op last1 first1 <CONT_COND2> #ID <IDENTIFICATOR>
[SP-3]=-4
[SP-4]=-4
[SP-1]=-4
[SP-3]=-3
}
#26 {
POP
STACK last first ‘;’ last1 first1 <EQUATION>
[SP-1]=-3
[SP-2]=-3
}
#27 {
POP
STACK ‘}’ last first last1 first1 <BODY>
[SP-1]=-2
[SP-2]=-2
}
#28 {
POP
STACK last first last1 first1 <VAR>
[SP-1]=-2
[SP-2]=-2
}
#29 {
POP
STACK last first ‘{’ last1 first1
[SP]=-1
}
#30 {
POP
STACK last first
[SP]=-1
}
#31 {
POP
STACK last first
[SP]=-1
}
#32 {
POP
STACK last first
[SP]=-1
}
#33 {
POP
STACK last first
[SP]=-1
}
#34 {
POP
STACK ‘}’ last first
[SP]=-1
}
#35 {
POP
STACK rslt 1op last first
[SP]=-1
[SP-2]=-1
}
# 36 {
POP
}