📄 exprtran.c
字号:
//本程序将简单中缀算术表达式翻译成四元式,表达式中只有+和*运算符
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "ctype.h"
char ch;
int k;
int T(char *p);
int F(char *p);
int E1(char p[10],char *t);
int T1(char p[10],char *t);
char *NEWT()
{
char *p;
char m[8];
p=(char*)malloc(8);
k++;
itoa(k,m,10);
strcpy(p+1,m);
p[0]='T';
return(p);
}
//产生式E↑t→T↑pE'↓p的翻译子程序,t为综合属性,形参用指针变量
int E(char *t)
{ int es=0;
char p[10]={" "};
es=T(p);//调分析T子程序
// printf("E中 %s\n",p);
es=E1(p,t);//调分析E1子程序
return(es);
}
//产生式E'↓p↑t→+T↑r @ADD↓p,r,t E'↓p↑t 和E'↓p↑t→ε翻译子程序
//p为继承属性,形参用整型变量,t为综合属性,形参用指针变量
int E1(char p[10],char *t)
{ int es;
char ch1;
char r[10]={" "},t0[10]={" "};
// printf("xym E1 %s\n",p);
if (ch=='+'||ch=='-')
{ ch1=ch;
ch=getchar();
es=T(r);
strcpy(t0,NEWT());//产生一个临时变量
if(ch1=='+')
printf(" ADD %s,%s,%s\n",p,r,t0);
else
printf(" SUB %s,%s,%s\n",p,r,t0);
es=E1(t0,t);
return(es);
} else
{
strcpy(t,p);
return(0);
}
}
//产生式T↑p→F↑pT'↓p的翻译子程序,t为综合属性,形参用指针变量
int T(char *t)
{ int es=0;
char p[10]={" "};
es=F(p);//调分析F子程序
// printf("T中 %s\n",p);
es=T1(p,t);//调分析T1子程序
return(es);
}
//T'=>*FT'|ε
//产生式T'↓p↑t→*F↑r @MULT↓p,r,t T' 和T'↓p↑t→ε翻译子程序
//p为继承属性,形参用整型变量,t为综合属性,形参用指针变量
int T1(char p[10],char *t)
{ int es;
char r[10]={" "},t0[10]={" "};
char ch2;
// printf("xym T1 %s\n",p);
if (ch=='*'||ch=='/')
{ ch2=ch;
ch=getchar();
es=F(r);
strcpy(t0,NEWT());//产生一个临时变量
if(ch2=='*')
printf(" MULT %s,%s,%s\n",p,r,t0);
else
printf(" DIV %s,%s,%s\n",p,r,t0);
es=T1(t0,t);
return(es);
} else
{
strcpy(t,p);
return(0);
}
}
//产生式F↑p ->(E↑p) |ID↑p的翻译子程序,p为综合属性,形参用指针变量
int F(char *p)//分析F子程序
{ int es=0;
if (ch=='(')
{
ch=getchar();
es=E(p);//调分析E子程序
if (ch!=')') return(3);
else {ch=getchar();return(es);}
} else
{
if (isalpha(ch)) //判断是否为字母
{
*p=ch;
// printf("F中 %s\n",p);
ch=getchar();
return(es);
} else return(4);
}
}
//主程序
main()
{
int es=0;
char t;
printf("请输入算术表达式(操作数只能是单个字母):");
ch=getchar();
printf("输出四元式为:\n");
es=E(&t);//调分析表达式E的翻译程序
if (es==0) printf("\n翻译成功!\n");
else printf("\n表达式有语法错误!\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -