文法:
E->E+T|T
T->T*F|F
F->(E)|i
#include "stdio.h"
char str[100];
int sym = 0;
int flag ;
void GetSymbol()
{
sym++;
}
void Error()
{
printf("%s不是句子\n",str);
flag=0;
}
void E()
{
T();
E1();
}
void E1()
{
if(str[sym]=='+'||str[sym]=='-')
{
GetSymbol();
T();
E1();
}
}
void T()
{
F();
T1();
}
void T1()
{
if(str[sym]=='*'||str[sym]=='/')
{
GetSymbol();
F();
T1();
}
}
void F()
{
if((str[sym]>='a'&&str[sym]<='z')||(str[sym]>='0'&&str[sym]<='9'))
{
if((str[sym+1]>='a'&&str[sym+1]<='z')||(str[sym+1]>='0'&&str[sym+1]<='9'))
{
Error();
}
else
GetSymbol();
}
else
{
if(str[sym]=='(')
{
GetSymbol();
E();
if(str[sym]==')')
{
GetSymbol();
}
else
{
Error();
}
}
else
{
Error();
}
}
}
int main()
{
printf("\n请输入句子:");
scanf("%s",&str);
flag=1;
E();
if(flag==1)
printf("%s是句子\n",str);
return 0;
}