www.pudn.com > myCompiler000.rar > compiler.cpp


#include "head.h" 
 
WORD word[BUFLINE];//单词量不能大于256 
stateStack _stack;//状态栈 
int G_table[20][8];//文法矩阵 
fourexp *fourexpHead;//生成四元式链的头指针 
 
Vn vn_stack[STACKSIZE];//生成四元式时用的非终结符栈 
int vn_stack_top = 0;//非终结符的栈顶 
 
void add_fourexp(){//四元式前面的计算地址 
	int num = 0 ; 
	fourexp * i = fourexpHead ; 
	while( i ){ 
		i->address = num ; 
		num++ ; 
		i = i->next;  
	} 
	i = fourexpHead; 
	while( i ){ 
		if( i->isadd == true ){ 
			i->temp = i->chain->address+1; 
		} 
		i = i->next;  
	} 
}//地址计算 
 
 
void pop_vn(int i){//出栈 
	vn_stack_top -= i; 
} 
void push_vn(Vn * vn_stack,Vn *s){//入栈 
	vn_stack[vn_stack_top] = *s; 
	vn_stack_top++; 
} 
 
void push(int n){//入栈 
	if(_stack.top==STACKSIZE) {cout<<"语法分析栈满!"<': 
				word[n].id = GREAT; 
			//	word[n].type = 1; 
				strcpy(word[n].name,">"); 
				n++; 
				break; 
 
			case '<': 
				word[n].id =LOW ; 
			//	word[n].type = 1; 
				strcpy(word[n].name,"<"); 
				n++; 
				break; 
			case '=': 
				if(buf[i-1] != ':'){ 
				word[n].id = EQUAL; 
			//	word[n].type = 1; 
				strcpy(word[n].name,"="); 
				n++; 
				} 
				break; 
 
			case '+': 
				word[n].id = PLUS; 
			//	word[n].type = 1; 
				strcpy(word[n].name,"+"); 
				n++; 
				break; 
 
			case '*': 
				word[n].id = MULTIPLY; 
			//	word[n].type = 1; 
				strcpy(word[n].name,"*"); 
				n++; 
				break; 
 
			case '(': 
				word[n].id = LEFT; 
			//	word[n].type = 4; 
				strcpy(word[n].name,"("); 
				n++; 
				break; 
 
			case ')': 
				word[n].id = RIGHT; 
			//	word[n].type = 4; 
				strcpy(word[n].name,")"); 
				n++; 
				break; 
		 	default : 
			 	if(buf[i] == '#') goto lv; 
				cout<<"有非法字符"; 
				exit(0); 
			} 
			i++; 
		} 
	} 
lv: 
	strcpy(word[n].name,"#"); 
//	word[n].type = 4; 
		word[n].id=ACC; 
	return n;//单词符号个数 
}//词法分析 
 
 
 
 
 
 
 
void G_init()//初始化文法矩阵 
{ 
	for(int i=0;i<20;i++)               	 
	for(int j=0;j<8;j++) 
		G_table[i][j]=-1; 
	G_table[0][0]=27;G_table[0][1]=23; //初始化文法表 
	G_table[1][0]=23;G_table[1][1]=0;G_table[1][2]=25;G_table[1][3]=1;G_table[1][4]=23;G_table[1][5]=2;G_table[1][6]=23; 
	G_table[2][0]=23;G_table[2][1]=0;G_table[2][2]=25;G_table[2][3]=1;G_table[2][4]=23; 
	G_table[3][0]=23;G_table[3][1]=3;G_table[3][2]=25;G_table[3][3]=4;G_table[3][4]=23; 
	G_table[4][0]=23;G_table[4][1]=5;G_table[4][2]=24;G_table[4][3]=6; 
	G_table[5][0]=23;G_table[5][1]=7;G_table[5][2]=8;G_table[5][3]=26; 
	G_table[6][0]=24;G_table[6][1]=23;G_table[6][2]=9;G_table[6][3]=24; 
	G_table[7][0]=24;G_table[7][1]=23; 
	G_table[8][0]=25;G_table[8][1]=25;G_table[8][2]=10;G_table[8][3]=25; 
	G_table[9][0]=25;G_table[9][1]=25;G_table[9][2]=11;G_table[9][3]=25; 
	G_table[10][0]=25;G_table[10][1]=7;G_table[10][2]=12;G_table[10][3]=7; 
	G_table[11][0]=25;G_table[11][1]=7;G_table[11][2]=13;G_table[11][3]=7; 
	G_table[12][0]=25;G_table[12][1]=7;G_table[12][2]=14;G_table[12][3]=7; 
	G_table[13][0]=25;G_table[13][1]=15; 
	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->ii=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<<"语法分析成功!"<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, 
						 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 10 ://B->i>i 
			{ 
			t_num++ ; 
			Vn * B = new Vn;//生成新的终极符结点 
			fourexp * f1 = new fourexp; 
			f1->next = NULL ; 
			f1->join(">",word[j-3].name,word[j-1].name, t_num,false); 
			B->head = f1 ; 
			B->tail = f1 ; 
			B->t_val = t_num ; 
			B->isTmp = true ; 
			fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。 
			push_vn( vn_stack ,   B ); 
			break; 
			} 
 
		case 11 ://B->inext = NULL ; 
			f1->join("<",word[j-3].name,word[j-1].name, t_num,false); 
			B->head = f1 ; 
			B->tail = f1 ; 
			B->t_val = t_num ; 
			B->isTmp = true ; 
			fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。 
			push_vn( vn_stack ,   B ); 
			break; 
			} 
			 
		case 12 ://B->i=i 
			{ 
			t_num++ ; 
			Vn * B = new Vn;//生成新的终极符结点 
			fourexp * f1 = new fourexp; 
			f1->next = NULL ; 
			f1->join("=",word[j-3].name,word[j-1].name, t_num,false); 
			B->head = f1 ; 
			B->tail = f1 ; 
			B->t_val = t_num ; 
			B->isTmp = true ; 
			fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。 
			push_vn( vn_stack ,   B ); 
			break; 
			} 
 
		case 13 ://true 
			{ 
			Vn * B = new Vn;//生成新的终极符结点 
			B->head = NULL ; 
			B->tail = NULL ; 
			fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。 
			B->ch = word[j-1].name ; 
			B->isTmp = false ; 
			push_vn( vn_stack ,   B); 
			break; 
			} 
			 
		case 14 ://B->false 
			{ 
			t_num++ ; 
			Vn * B = new Vn;//生成新的终极符结点 
			B->head = NULL ; 
			B->tail = NULL ; 
			fourexpHead = B->head ;//链成用fourexpHead传回到主函数中。 
			B->ch = word[j-1].name ; 
			B->isTmp = false ; 
			push_vn( vn_stack ,   B); 
			break; 
			} 
			 
		case 15 ://E->E+E 
			{ 
			t_num++ ; 
			Vn * E = 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); 
					E->head = f1 ; 
					E->tail = f1 ; 
				} 
				else{ 
					f1->join("+",vn_stack[vn_stack_top-2].ch , 
						 vn_stack[vn_stack_top-1].t_val, t_num,false ); 
					E->head = vn_stack[vn_stack_top-1].head ; 
					vn_stack[vn_stack_top-1].tail->next = f1 ; 
					E->tail = f1 ; 
				} 
			} 
			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); 
					E->head = vn_stack[vn_stack_top-2].head ; 
					vn_stack[vn_stack_top-2].tail->next = f1 ; 
					E->tail = f1 ; 
				} 
				else{ 
					f1->join("+", vn_stack[vn_stack_top-2].t_val , 
						 vn_stack[vn_stack_top-1].t_val,  t_num , false); 
					E->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 ; 
					E->tail = f1 ; 
				} 
			} 
			E->t_val = t_num ; 
			E->isTmp = true ; 
			fourexpHead = E->head ;//链成用fourexpHead传回到主函数中。 
			pop_vn( 2); 
			push_vn( vn_stack ,   E ); 
			break; 
			} 
			 
		case 16 ://E->E*E 
			{ 
			t_num++ ; 
			Vn * E = 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); 
					E->head = f1 ; 
					E->tail = f1 ; 
				} 
				else{ 
					f1->join("*",vn_stack[vn_stack_top-2].ch , 
						 vn_stack[vn_stack_top-1].t_val, t_num,false ); 
					E->head = vn_stack[vn_stack_top-1].head ; 
					vn_stack[vn_stack_top-1].tail->next = f1 ; 
					E->tail = f1 ; 
				} 
			} 
			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); 
					E->head = vn_stack[vn_stack_top-2].head ; 
					vn_stack[vn_stack_top-2].tail->next = f1 ; 
					E->tail = f1 ; 
				} 
				else{ 
					f1->join("*", vn_stack[vn_stack_top-2].t_val , 
						 vn_stack[vn_stack_top-1].t_val ,  t_num, false); 
					E->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 ; 
					E->tail = f1 ; 
				} 
			} 
			E->t_val = t_num ; 
			E->isTmp = true ; 
			fourexpHead = E->head ;//链成用fourexpHead传回到主函数中。 
			pop_vn( 2); 
			push_vn( vn_stack ,   E ); 
			break; 
			} 
			 
		case 17 ://E->(E) 
			{ 
			Vn * E = new Vn;//生成新的终极符结点 
			E->head = vn_stack[vn_stack_top-1].head ; 
			E->tail = vn_stack[vn_stack_top-1].tail ; 
			fourexpHead = E->head ;//链成用fourexpHead传回到主函数中。 
			E->isTmp = true ; 
			E->t_val = vn_stack[vn_stack_top-1].t_val ; 
			pop_vn( 1); 
			push_vn( vn_stack ,   E ); 
			break; 
			} 
						 
		case 18 ://E->i 
			{ 
			Vn * E = new Vn;//生成新的终极符结点 
			E->head = NULL ; 
			E->tail = NULL ; 
			fourexpHead = E->head ;//链成用fourexpHead传回到主函数中。 
			E->ch = word[j-1].name ; 
			E->isTmp = false ; 
			push_vn( vn_stack ,   E ); 
			break; 
			} 
 
		case 19 ://E->n 
			Vn * E = new Vn;//生成新的终极符结点 
			E->head = NULL ; 
			E->tail = NULL ; 
			fourexpHead = E->head ;//链成用fourexpHead传回到主函数中。 
			E->ch = word[j-1].name ; 
			E->isTmp = false ; 
			push_vn( vn_stack ,   E ); 
			break; 
			 
 
 
 
		} 
 
 
 
	} 
	else { 
		error1(); 
	} 
 
	 
//	i = table[i][word[j].id]; 
}while(!isEmpty(_stack)); 
}//syntax语法分析 
 
 
 
 
int main(int argc, char* argv[]) 
{ 
	int length=10;//文件名不能太长,要小于10个字符 
    char *strbuf; 
	int i; 
	fourexpHead=NULL; 
 //	char * filename; 
	FILE* p; 
 //	if(argc ==2 ) 
//	{ 
//	 length = strlen(argv[1]); 
//	 filename = new char[length+1]; 
//	 strcpy(filename,argv[1]); 
//	 	filename[length] = '\0'; 
		sourceFile = fopen("c1.txt","r");// 
		if(sourceFile == NULL) 
		{ 
			cout<<"打开文件失败"<Display(); 
		q = q->next; 
	} 
 
getchar(); 
 
//	}//if 
 
 
	return 0; 
}