}
if (IsLowerThan(stack[j],r)||IsEqualTo(stack[j],r)) { } else
return ERROR; stack[++k]=r;
//printf(\新结点入栈,堆栈指针移进k=%d\\n\
//printf(\为:\
// printf(\栈顶节点为:\
}while (r!=9); return RIGHT;
int IsHigherThan(int a,int b) { }
int IsLowerThan(int a,int b) { }
int IsEqualTo(int a,int b) { }
int Reduce(int a,int b,int c) {
char gl='F'; printf(\); for(;a<=b;a++){
changinttochar(stack[a]);
if(stack[a]==1||(stack[a])==0)gl='E'; if(table[a][b]==0)
return RIGHT; return ERROR; else
if(table[a][b]==-1)
return RIGHT; return ERROR; else
if(table[a][b]==1)
return RIGHT;
return report_error(table[a][b]); return ERROR;
else if(table[a][b]!=-1&&table[a][b]!=0) else
}
}
if(stack[a]==2||(stack[a])==3)gl='T';
printf(\类型为%c,归约为N,\,gl); return 10;
//************************************************语法分析**********
//************************************************语义分析********** char
E( ) /* 识别<算术表达式>*/ {
E1_PLACE=T( ); /* 语法范畴E的一个属性*/ while (SYM='+' || SYM='-') {
ADVANCE; /* 将输入串指针调整至指向下一个输入符号*/ E2_PLACE=T( );
T1=NewTemp( ); /* 分配一个新的临时变量*/
GEN(±, E1_PLACE, E2_PLACE, T1); /* 根据所给实参产生一个四元式*/ E1_PLACE=T1; }
return E1_PLACE; }
T( ) /* 识别<项>*/ {
T1_PLACE=F( );
while (SYM='*' || SYM='/') { ADVANCE; T2_PLACE=F( ); T1=NewTemp( );
GEN(*/, T1_PLACE, T2_PLACE, T1); T1_PLACE=T1; }
return T1_PLACE; }
F( ) /* 识别<因式>*/ {
if (SYM='标识符') { ADVANCE;
return Entry(i.词文); /* 以标识符的词文为名字查、填符号表*/
} else
if ( SYM='(' ) { ADVANCE; PLACE=E( ); if ( SYM=')' ) { ADVANCE; return PLACE; }
else ERROR; }
else ERROR; }
//************************************************语义分析********** main() {
//int j=0; FILE *fp; char ch;
if((fp=fopen(\,\))==NULL) //readonly方式打开文件 { }
printf(\文件内容如下:\\n\); ch=fgetc(fp); while(ch!=EOF) { }
printf(\语法分析如下:\\n\); fseek(fp,0,0); int key; ch=fgetc(fp); coor(ch); while(ch!=EOF) {
if(ch==' '||ch==9||ch==10){
ch=fgetc(fp);
coor(ch);}//'\\t'为水平制表符ASCII码为.\\n占两个字节,前一字节无ASCII码为换行格
//坐标移到文档开始位置
putchar(ch); ch=fgetc(fp);
//EOF文档结束标志
printf(\找不到文件!!!\\n\); return(0);
式,后一字节ASCII码为
else
}
}
{ }
fseek(fp,-1,1); l-=1;
key=parser(fp); if(key==1) { } else { }
//printf(\ch=fgetc(fp); coor(ch);
printf(\出现语法错误!!\\n\\n\);
printf(\成功通过词法分析和语法分析!!\\n\\n\);
//扫描
printf(\); fclose(fp); return(0);
正确输入时结果:
错误输入时结果:

