#include "stdio.h"
#include "stdlib.h"
char token;
int exp();
int term();
int factor();
void error()
{
fprintf(stderr,"Error\n");
exit(1);
}
//
void match(char expecttoken)
{
if ( token == expecttoken)
{
token = getchar();
}
else
{
error();
}
}
int main()
{
int result;
token = getchar();
result = exp();
if ( token == '\n')
{
printf("result=%d",result);
return 0;
}
else error();
return 0;
}
int exp()
{
int temp = term();
while((token=='+'||token=='-'))
switch(token)
{
case '+':
match('+');
temp+=term();
break;
case '-':
match('-');
temp -=term();
break;
}
return temp;
}
int term()
{
int temp = factor();
while(token == '*')
{
match('*');
temp*=factor();
}
return temp;
}
int factor()
{
int temp;
if (token == '(')
{
match('(');
temp = exp();
match(')');
}
else if( isdigit(token))
{
ungetc(token,stdin);
scanf("%d",&temp);
token = getchar();
}
else error();
return temp;
}
出自大名鼎鼎的编译原理作者之手。