📄 compiler.cpp
字号:
G_table[14][0]=25;G_table[14][1]=16;
G_table[15][0]=26;G_table[15][1]=26;G_table[15][2]=17;G_table[15][3]=26;
G_table[16][0]=26;G_table[16][1]=26;G_table[16][2]=18;G_table[16][3]=26;
G_table[17][0]=26;G_table[17][1]=19;G_table[17][2]=26;G_table[17][3]=20;
G_table[18][0]=26;G_table[18][1]=7;
G_table[19][0]=26;G_table[19][1]=21;
}
void syntax(){//语法分析程序
/**文法
0 S'->S
1 S->if B then S else S
2 S->if B then S
3 S-> while B do S
4 S->begin L end
5 S->i:=E
6 L->S;L
7 L->S
8 B->B&B
9 B->B|B
10 B->i>i
11 B->i<i
12 B->i=i
13 B->true
14 B->false
15 E->E+E
16 E->E*E
17 E->(E)
18 E->i
19 E->n
*/
int table[43][27]={//slr[1]分析表
{ 2 , WRD_ERR , WRD_ERR , 3 , WRD_ERR , 4 , WRD_ERR , 5 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 1 , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 99 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 7 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 8 , 9 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 6 , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 7 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 8 , 9 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 10 , WRD_ERR },
{ 2 , WRD_ERR , WRD_ERR , 3 , WRD_ERR , 4 , WRD_ERR , 5 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 12 , 11 , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 13 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , 14 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 15 , 16 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 17 , 18 , 19 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , -13 , WRD_ERR , WRD_ERR , -13 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -13 , -13 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , -14 , WRD_ERR , WRD_ERR , -14 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -14 , -14 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 20 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 15 , 16 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 21 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -7 , WRD_ERR , WRD_ERR , 22 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 25 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 24 , WRD_ERR , 26 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 23 },
{ 2 , WRD_ERR , WRD_ERR , 3 , WRD_ERR , 4 , WRD_ERR , 5 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 27 , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 7 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 8 , 9 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 28 , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 7 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 8 , 9 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 29 , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 30 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 31 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 32 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ 2 , WRD_ERR , WRD_ERR , 3 , WRD_ERR , 4 , WRD_ERR , 5 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 33 , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , -4 , WRD_ERR , WRD_ERR , WRD_ERR , -4 , WRD_ERR , WRD_ERR , -4 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -4 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ 2 , WRD_ERR , WRD_ERR , 3 , WRD_ERR , 4 , WRD_ERR , 5 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 12 , 34 , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , -5 , WRD_ERR , WRD_ERR , WRD_ERR , -5 , WRD_ERR , WRD_ERR , -5 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 35 , 36 , WRD_ERR , WRD_ERR , WRD_ERR , -5 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 25 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 24 , WRD_ERR , 26 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 37 },
{ WRD_ERR , WRD_ERR , -18 , WRD_ERR , WRD_ERR , WRD_ERR , -18 , WRD_ERR , WRD_ERR , -18 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -18 , -18 , WRD_ERR , -18 , WRD_ERR , -18 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , -19 , WRD_ERR , WRD_ERR , WRD_ERR , -19 , WRD_ERR , WRD_ERR , -19 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -19 , -19 , WRD_ERR , -19 , WRD_ERR , -19 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , 38 , WRD_ERR , WRD_ERR , WRD_ERR , -2 , WRD_ERR , WRD_ERR , -2 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -2 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , -8 , WRD_ERR , WRD_ERR , -8 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -8 , -8 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , -9 , WRD_ERR , WRD_ERR , -9 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 15 , -9 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , -10 , WRD_ERR , WRD_ERR , -10 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -10 , -10 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , -11 , WRD_ERR , WRD_ERR , -11 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -11 , -11 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , -12 , WRD_ERR , WRD_ERR , -12 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -12 , -12 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , -3 , WRD_ERR , WRD_ERR , WRD_ERR , -3 , WRD_ERR , WRD_ERR , -3 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -3 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -6 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 25 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 24 , WRD_ERR , 26 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 39 },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 25 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 24 , WRD_ERR , 26 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 40 },
{ WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 35 , 36 , WRD_ERR , 41 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ 2 , WRD_ERR , WRD_ERR , 3 , WRD_ERR , 4 , WRD_ERR , 5 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , 42 , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , -15 , WRD_ERR , WRD_ERR , WRD_ERR , -15 , WRD_ERR , WRD_ERR , -15 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -15 , 36 , WRD_ERR , -15 , WRD_ERR , -15 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , -16 , WRD_ERR , WRD_ERR , WRD_ERR , -16 , WRD_ERR , WRD_ERR , -16 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -16 , -16 , WRD_ERR , -16 , WRD_ERR , -16 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , -17 , WRD_ERR , WRD_ERR , WRD_ERR , -17 , WRD_ERR , WRD_ERR , -17 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -17 , -17 , WRD_ERR , -17 , WRD_ERR , -17 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
{ WRD_ERR , WRD_ERR , WRD_ERR , -1 , WRD_ERR , WRD_ERR , -1 , WRD_ERR , WRD_ERR , -1 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR , -1 , WRD_ERR , WRD_ERR , WRD_ERR , WRD_ERR },
};
int i;
int j = 0;
int popNum=0;
int staTop=0;
int G_tmp=0;//表示哪一个产生式
int t_num=0;
int i_pointer;//表示i位置的指针
stackinit();
G_init();
push(staTop);
i = word[j].id;
int vn;
//staTop = i;
do{
if(table[staTop][i]>0){
//移进
if(table[staTop][i]==99) {
cout<<"语法分析成功!"<<endl;break;
}
if(word[j].id == EVALUATE)
i_pointer = j -1;
push(table[staTop][i]);
staTop = table[staTop][i];
if(i!=vn) j++;
i = word[j].id;
}
else if(table[staTop][word[j].id]<0 && table[staTop][word[j].id]!=WRD_ERR){
//归约
cout<<-table[staTop][word[j].id]<<" ";
G_tmp = -table[staTop][word[j].id];
int k=0;
vn = G_table[-table[staTop][word[j].id]][k];
while(G_table[-table[staTop][word[j].id]][k]!=-1) k++;
popNum = k-1;
while(popNum>0){ pop(); popNum--; }
i = vn;
staTop = gettop();
//语义分析
switch(G_tmp){
case 0:
break;
case 1://S->if B then S else S
{
Vn *S= new Vn;//生成新的终极符结点
fourexp *f1 = new fourexp;
fourexp *f2 = new fourexp;
S->head = vn_stack[vn_stack_top-3].head;//确定s的四元式的起点
vn_stack[vn_stack_top-3].tail->next = f1 ;//将新的四元式链入成串
f1->next = vn_stack[vn_stack_top-2].head ;//->s1链入四元式组
vn_stack[vn_stack_top-2].tail->next = f2 ;//s1 -> 链入四元式组
f2->next = vn_stack[vn_stack_top-1].head ;//-> s2 链入四元式组
S->tail = vn_stack[vn_stack_top-1].tail ;
f1->join("j=", vn_stack[vn_stack_top-3].t_val, 0, 0, true );
f1->chain = f2 ;
f2->join("jmp","-","-", 0,true);
f2->chain = vn_stack[vn_stack_top-1].tail ;
fourexpHead = S->head ;//链成用fourexpHead传回到主函数中。
pop_vn(3);
push_vn( vn_stack , S );
break;
}
case 2://S->if B then S
{
Vn * S = new Vn;//生成新的终极符结点
fourexp * f1 = new fourexp;
f1->next = NULL ;
S->head = vn_stack[vn_stack_top-2].head;//确定s的四元式的起点
vn_stack[vn_stack_top-2].tail->next = f1 ;//将新的四元式链入成串
f1->next = vn_stack[vn_stack_top-1].head ;//->s1链入四元式组
S->tail = vn_stack[vn_stack_top-1].tail ;
f1->join("j=", vn_stack[vn_stack_top-2].t_val, 0,
vn_stack[vn_stack_top-1].tail->address,true );
f1->chain = vn_stack[vn_stack_top-1].tail ;
fourexpHead = S->head ;//链成用fourexpHead传回到主函数中。
pop_vn( 2 );
push_vn( vn_stack , S );
break ;
}
case 3 ://S->while B do S
{
Vn * S = new Vn;//生成新的终极符结点
fourexp * f1 = new fourexp;
fourexp * f2 = new fourexp;
S->head = vn_stack[vn_stack_top-2].head;//确定s的四元式的起点
vn_stack[vn_stack_top-2].tail->next = f1 ;//将新的四元式链入成串
f1->next = vn_stack[vn_stack_top-1].head ;//->s1链入四元式组
vn_stack[vn_stack_top-1].tail->next = f2;
f2->next = NULL;
S->tail = f2 ;
f1->join("j=" , vn_stack[vn_stack_top-2].t_val, 0,
0, true );
f1->chain = f2 ;
f2->join("jmp","-","-", 0,true );
f2->chain = vn_stack[vn_stack_top-2].tail;
fourexpHead = S->head ;//链成用fourexpHead传回到主函数中。
pop_vn(2);
push_vn( vn_stack ,S);
break ;
}
case 4 ://S->begin L end
{
Vn * S = new Vn;//生成新的终极符结点
S->head = vn_stack[vn_stack_top-1].head;//确定s的四元式的起点
S->tail = vn_stack[vn_stack_top-1].tail;
fourexpHead = S->head ;//链成用fourexpHead传回到主函数中。
pop_vn( 1 );
push_vn( vn_stack , S );
break;
}
case 5 ://S->i:= E
{
Vn * S = new Vn;//生成新的终极符结点
fourexp * f1 = new fourexp;
f1->next = NULL ;
if( vn_stack[vn_stack_top-1].isTmp == false ){
f1->join(":=",vn_stack[vn_stack_top-1].ch,"-",word[i_pointer].name,false);
S->head = f1 ;
S->tail = f1 ;
}
else{
f1->join(":=", vn_stack[vn_stack_top-1].t_val ,"-",word[i_pointer].name,false);
S->head = vn_stack[vn_stack_top-1].head;//确定s的四元式的起点
vn_stack[vn_stack_top-1].tail->next = f1 ;//将新的四元式链入成串
S->tail = f1 ;
}
fourexpHead = S->head ;//链成用fourexpHead传回到主函数中。
pop_vn( 1 );
push_vn( vn_stack , S );
break;
}
case 6 ://L->S;L
{
Vn * L = new Vn;//生成新的终极符结点
L->head = vn_stack[vn_stack_top-2].head ;
vn_stack[vn_stack_top-2].tail->next = vn_stack[vn_stack_top-1].head;
L->tail = vn_stack[vn_stack_top-1].tail ;
L->isTmp = true ;
L->t_val = vn_stack[vn_stack_top-1].t_val ;
fourexpHead = L->head ;//链成用fourexpHead传回到主函数中。
pop_vn( 2 );
push_vn( vn_stack , L );
break;
}
case 7 ://L->S
{
Vn * L = new Vn;//生成新的终极符结点
L->head = vn_stack[vn_stack_top-1].head ;
L->tail = vn_stack[vn_stack_top-1].tail ;
L->isTmp = true ;
L->t_val = vn_stack[vn_stack_top-1].t_val ;
fourexpHead = L->head ;//链成用fourexpHead传回到主函数中。
pop_vn( 1);
push_vn( vn_stack , L );
break;
}
case 8 ://B->B&B
{
t_num++ ;
Vn * B = new Vn;//生成新的终极符结点
fourexp * f1 = new fourexp;
f1->next = NULL ;
if( vn_stack[vn_stack_top-2].isTmp == false ){
if( vn_stack[vn_stack_top-1].isTmp == false ){
f1->join("&",vn_stack[vn_stack_top-2].ch,
vn_stack[vn_stack_top-1].ch , t_num,false );
B->head = f1 ;
B->tail = f1 ;
}
else{
f1->join("&",vn_stack[vn_stack_top-2].ch,
vn_stack[vn_stack_top-1].t_val, t_num,false );
B->head = vn_stack[vn_stack_top-1].head ;
vn_stack[vn_stack_top-1].tail->next = f1 ;
B->tail = f1 ;
pop_vn( 1);
}
}
else{
if( vn_stack[vn_stack_top-1].isTmp == false ){
f1->join("&", vn_stack[vn_stack_top-2].t_val,
vn_stack[vn_stack_top-1].ch, t_num,false );
B->head = vn_stack[vn_stack_top-2].head ;
vn_stack[vn_stack_top-2].tail->next = f1 ;
B->tail = f1 ;
}
else{
f1->join("&", vn_stack[vn_stack_top-2].t_val ,
vn_stack[vn_stack_top-1].t_val, t_num,false );
B->head = vn_stack[vn_stack_top-2].head ;
vn_stack[vn_stack_top-2].tail->next = vn_stack[vn_stack_top-1].head;
vn_stack[vn_stack_top-1].tail->next = f1 ;
B->tail = f1 ;
}
}
B->t_val = t_num ;
B->isTmp = true ;
fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。
pop_vn( 2);
push_vn( vn_stack , B );
break;
}
case 9 ://B->B|B
{
t_num++ ;
Vn * B = new Vn;//生成新的终极符结点
fourexp * f1 = new fourexp;
f1->next = NULL ;
if( vn_stack[vn_stack_top-2].isTmp == false ){
if( vn_stack[vn_stack_top-1].isTmp == false ){
f1->join("or",vn_stack[vn_stack_top-2].ch,
vn_stack[vn_stack_top-1].ch , t_num,false );
B->head = f1 ;
B->tail = f1 ;
}
else{
f1->join("|",vn_stack[vn_stack_top-2].ch,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -