⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compiler.cpp

📁 一个很一般的编译程序 有词法分析
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	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 + -