发布时间 : 星期二 文章语义分析实验报告(实验三)更新完毕开始阅读428f941c650e52ea551898d4
} else
{ switch(ch)
{ case'<':m=0;token[m++]=ch;
ch=prog[++p]; if(ch=='=') { } else { syn=20;
ch=prog[--p];}
syn=22;
token[m+1]=ch;
break;
case'>':m=0;token[m++]=ch;
ch=prog[++p]; if(ch=='=') { syn=24; } else { syn=23; } break;
ch=prog[--p]; token[m++]=ch;
case'=':m=0,token[m++]=ch;
ch=prog[++p]; if(ch=='=') { syn=25; } else { syn=18; } break;
ch=prog[--p]; token[m++]=ch;
case'!':m=0;token[m++]=ch;ch=prog[++p];
if(ch=='=') { syn=22;
}
token[m+1]=ch;}
else { syn=-1;} break;
case'+':syn=13;token[0]=ch;break; case'-':syn=14;token[0]=ch;break; case'*':syn=15;token[0]=ch;break; case'/':syn=16;token[0]=ch;break; case';':syn=26;token[0]=ch;break; case'(':syn=27;token[0]=ch;break; case')':syn=28;token[0]=ch;break; case'#':syn=0;token[0]=ch;break; default:syn=-1; }
}//end of scaner
void emit(char *result,char *ag1,char *op,char *ag2) //将三地址代码送到四元式表
{ strcpy(quad[count].result,result);
strcpy(quad[count].ag1,ag1);
strcpy(quad[count].op,op);
}
strcpy(quad[count].ag2,ag2); count++; return;
char *newtemp() //返回临时变量t1,t2...
{ char *p;
char m[8];
p=(char *)malloc(8); k++;
itoa(k,m,10); //功能将整数装换为字符串。并将值保存在m中。
10是基数 表示将k的值转化为10进制数。
}
char *factor() { char *fplace;
fplace=(char *)malloc(12); strcpy(p+1,m); p[0]='t'; return(p);
strcpy(fplace,\if(syn==10)
{ strcpy(fplace,token); }
else if(syn==11) { itoa(sum,fplace,10); }
scaner(); scaner();
else if(syn==27)
}
char *term(void)
{ char *tp,*ep2,*eplace,*tt;
tp=(char *)malloc(12); { scaner(); } else
{ printf(\ }
return(fplace);
kk=1;
fplace=expression(); if(syn==28)
scaner();
else
{ printf(\ }
kk=1;
ep2=(char *)malloc(12); eplace=(char *)malloc(12); tt=(char *)malloc(12);
strcpy(eplace,factor()); while(syn==15||syn==16) {
if(syn==15) { tt[0]='*';
tt[1]='\\0';}
else if(syn==16)
}
}
{ tt[0]='/';
tt[1]='\\0';}
scaner();
strcpy(ep2,factor());
strcpy(tp,newtemp()); //tp为临时变量
emit(tp,eplace,tt,ep2); //将三地址代码送到四元式表 strcpy(eplace,tp);
return(eplace);
char *expression()
{ char*tp,*ep2,*eplace,*tt; }
tp=(char*)malloc(12); ep2=(char*)malloc(12); eplace=(char*)malloc(12); tt=(char*)malloc(12); strcpy(eplace,term()); while(syn==13||syn==14) { if(syn==13) }
return(eplace);
{ tt[0]='+'; }
else if(syn==14) { tt[0]='-'; } scaner();
strcpy(ep2,term()); strcpy(tp,newtemp()); emit(tp,eplace,tt,ep2);// strcpy(eplace,tp);
tt[1]='\\0'; tt[1]='\\0';
statement()
{ char tt[8],eplace[8];
int schain=0; switch(syn)