计算机编译原理实验生成四元式序列Word格式文档下载.docx
《计算机编译原理实验生成四元式序列Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《计算机编译原理实验生成四元式序列Word格式文档下载.docx(8页珍藏版)》请在冰点文库上搜索。
编程实现生成四元式的语法分析程序,掌握的结合语法分析实现翻译方案的思路和方法。
实验内容:
实验输入:
输入任意的赋值语句表达式;
实验输出:
相应的四元式序列。
测试实例:
输入表达式
1.a=((b+c)*d–e/f)*2
2.q=((x*x+w)-(y/y-e))*r
实验代码:
#include<
stdio.h>
stdlib.h>
#defineMAX100
voidSET_Mul_Div(inti,intm);
voidSET_Add_Sub(intj,intm);
voidprint();
intm=0;
intcount=0;
chartempvar='
A'
;
inttemp;
charstring[MAX];
//用于存放表达式
intmain()
{
intp[MAX];
charch;
intc=-1,q=0;
printf("
请输入赋值语句:
\n"
);
while((ch=getchar())!
='
\n'
)
{
string[m++]=ch;
if(ch=='
||ch=='
+'
-'
*'
/'
)
count++;
elseif(ch=='
('
{
p[++c]=m-1;
}
)'
q=m-1;
SET_Mul_Div(p[c],q);
//从左括号处理到又括号
SET_Add_Sub(p[c],q);
temp=(int)tempvar-1;
tempvar=(char)temp;
string[p[c]]=string[m-1]=tempvar;
c--;
temp=(int)tempvar+1;
/********调用生成四元式的函数********/
print();
/*********判断是否成功**********/
if(count==0)
Successful!
else
Wrong!
"
system("
pause"
}
voidSET_Mul_Div(inti,intm)//处理乘除运算
{
for(i++;
i<
=m-1;
i++)
if(string[i]=='
||string[i]=='
(%c%c%c%c)\n"
string[i],string[i-1],string[i+1],
tempvar);
string[i-1]=string[i]=string[i+1]=tempvar;
count--;
}
voidSET_Add_Sub(intj,intm)//处理加减运算
j++;
for(;
j<
j++)
if(string[j]=='
||string[j]=='
string[j],string[j-1],string[j+1],tempvar);
string[j-1]=string[j]=string[j+1]=tempvar;
/*打印*/
voidprint()
inti;
for(i=0;
i++)//处理乘除运算
string[i],string[i-1],string[i+1],tempvar);
}
intj;
for(j=0;
j++)//处理加减运算
intk;
for(k=0;
k<
k++)//处理赋值运算
if(string[k]=='
temp=(int)tempvar--;
(%c%c%c)\n"
string[k],string[k+1],
string[k-1],tempvar);
string[k-1]=tempvar;
实验结果:
实验总结:
通过本次实验我完成生成四元式的语法分析程序,掌握的结合语法分析实现翻译方案的思路和方法。
本次实验还是遇到许多困难,通过上网查看以及查看许多书籍,最终还是完成了本次试验,还是收获挺大的。
但是实验中还存在着许多不足,如规则的顺序,first集合的求解等,还需不断完善。
实验评语:
该学生在本次试验中完成生成四元式的语法分析程序,基本掌握的结合语法分析实现翻译方案的思路和方法,但是程序在一些细节及特殊文法的处理上还需要进一步完善,如编程时注意编程风格:
空行的使用、注释的使用、缩进的使用,如果遇到错误的表达式,应输出错误提示信息等。
实验成绩
教师签字
如有侵权请联系告知删除,感谢你们的配合!