语义分析实验报告(实验三) 联系客服

发布时间 : 星期二 文章语义分析实验报告(实验三)更新完毕开始阅读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)