这个程序利用了最简单的文法,只能判断最简单的表达式,但是确实是货真价实的递归下降子程序。
以下是文法规则:
E::=TE’
E’::=+TE’|o
T::=i
注释:o是空,已消除左递归
#include <stdio.h>
#define MAXSIZE 100;
struct SourceStr{ /*要判断的字符串的数据结构*/
char sourceBuf[100];/*串最长不超过100*/
int pointer;
};
struct SourceStr sourceStr;
pointer = 0;
char token; /*取得的一个字符*/
int flag=0; /*标志物*/
char getToken()
{
char token = sourceStr.sourceBuf[sourceStr.pointer++];
return token;
}
void error()
{
printf("error used\n");
}
void E() /*语法分析入口*/
{
if((token=getToken())!= 'i')
{
error();
}
else
{
Y();
}
}
void Y()
{
if((token=getToken())=='+' ||token =='-' ||token =='*' ||token =='/')
{
if((token = getToken())=='i')
{
Y();
}
else if(token != 'i')
{
error();
}
}
else if(token =='#')
{
flag=1;
}
else
{
error();
}
}
int main()
{
gets(sourceStr.sourceBuf);
E();
if(flag == 1)
printf("success");
return 0;
}
运行结果:
i++#
error uesd
i+i-I*i/i#
success