📄 exprtranlate.c
字号:
//本程序将简单中缀算术表达式翻译成波兰后缀表达式,表达式中只有+和*运算符
//文法为E->E+T,E->T,T->T*F,T->F,F->(E),F->i
//其中i可为任意字母
//去掉左递归,修改后文法为:E->T{+T},T->F{*F},F->(E)|i
#include "stdio.h"
#include "ctype.h"
char ch;
int T();
int F();
int E() //分析E子程序 E->T{+T}
{ int es1=0,es2=0;
char ch1;
es1=T();//调分析T子程序
while (ch=='+'||ch=='-')
{ ch1=ch;
ch=getchar();
es2=T();//调分析T子程序
if (ch1=='+')
es1=es1+es2;
//printf("+");
else
es1=es1-es2;
//printf("-");
}
return(es1);
}
int T() //调分析T子程序T->F{*F}
{ int es1=0,es2=0;
char ch2;
es1=F();//调分析F子程序
while (ch=='*'||ch=='/')
{ ch2=ch;
ch=getchar();
es2=F();//调分析F子程序
if (ch2=='*')
es1=es1*es2;
else
es1=es1/es2;
}
return(es1);
}
int F()//分析F子程序
{ int es=0,kk=0;
if (ch=='(')
{
ch=getchar();
es=E();//调分析E子程序
if (ch!=')') return(es);
else {ch=getchar();return(es);}
} else
{
if (isdigit(ch)) //判断是否为字母
{
while(isdigit(ch))
{
es=ch-0x30;
kk=kk*10+es;
ch=getchar();
}
return(kk);
}
else
{
printf("error\n");
return(0);
}
}
}
void main()
{
int es;
while(1)
{
es=0;
printf("请输入算术表达式:");
ch=getchar();
// printf("%c",ch);
if (isalpha(ch)) return;
es=E();//调分析表达式E的翻译程序
printf("算术表达式的值:%d \n",es);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -