废话不多说,直接上代码
#include <stdio.h>
#include <stdlib.h>
void error();
void match(char t);
void F();
void Tplus();
void Eplus();
void E();
void T();
char lookahead;
char nexttoken()
{
char next = getchar();
return next;
}
int main()
{
lookahead = getchar();
printf("后缀表达式:\n");
E();
if (lookahead == '#')
printf("\n表达式正确!\n");
else
printf("\n表达式错误! \n");
return 0;
}
void error()
{
printf("输入表达式错误! \n");
exit(0);
return;
}
void match(char t)
{
if(lookahead == t){
lookahead = nexttoken();
}
else error();
}
void F()
{
if ((lookahead >= 'a' && lookahead <= 'z') || (lookahead >= '0' && lookahead <= '9'))
{
printf("%c", lookahead); // 输出操作数
match(lookahead);
}
else if (lookahead == '(')
{
match('(');
E();
if(lookahead == ')')
match(')');
else error();
}
else error();
}
void Tplus()
{
if (lookahead == '*')
{
match('*');
F();
printf("*"); // 输出运算符
Tplus();
}
else if (lookahead == '/')
{
match('/');
F();
printf("/"); // 输出运算符
Tplus();
}
}
void Eplus()
{
if (lookahead == '+')
{
match('+');
T();
printf("+"); // 输出运算符
Eplus();
}
else if (lookahead == '-')
{
match('-');
T();
printf("-"); // 输出运算符
Eplus();
}
}
void E()
{
T();
Eplus();
}
void T()
{
F();
Tplus();
}
// a+b-c*9/5#

207

被折叠的 条评论
为什么被折叠?



