文档介绍:
西北师范大学计算机科学与工程学院学生实验报告
学号
专业
计算机科学与技术
姓名
课程名称
计算机编译原理
班级
实验名称
生成四元式序列
课程类型
专业课
实验目的:
编程实现生成四元式的语法分析程序,掌握的结合语法分析实现翻译方案的思路和方法。
实验内容:
实验输入:输入任意的赋值语句表达式;
实验输出:相应的四元式序列。
测试实例:
输入表达式
1.a = ( ( b + c ) * d – e / f ) * 2
2.q =( ( x * x + w ) - (y / y - e ) ) * r
实验代码:
#include
#include
#define MAX 100
void SET_Mul_Div(int i,int m);
void SET_Add_Sub(int j,int m);
void print();
int m=0;
int count=0;
char tempvar='A';
int temp;
char string[MAX]; //用于存放表达式
int main()
{
int p[MAX];
char ch;
int c=-1,q=0;
printf("请输入赋值语句:\n");
while((ch = getchar())!='\n')
{
string[m++]=ch;
if(ch=='='||ch=='+'||ch=='-'||ch=='*'||ch=='/')
count++;
else if(ch=='(')
{
p[++c]=m-1;
}
else if(ch==')')
{
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;
tempvar=(char)temp;
}
}
/********调用生成四元式的函数********/
print();
/*********判断是否成功**********/
if(count==0)
printf("essful!\n");
else
printf("Wrong!");
printf("\n");
system("pause");
}
void SET_Mul_Div(int i,int m) //处理乘除运算
{
for(i++;i<=m-1;i++)
{
if(string[i]=='*'||string[i]=='/')
{
printf("(%c %c %c %c)\n",string[i],string[i-1],string[i+1],
tempvar);
string[i-1]=string[i]=string[i+1]=tempv
内容来自淘豆网www.taodocs.com转载请标明出处.