递归下降子程序对四则运算的语法分析
下面的代码是用字符串来模拟的
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SourceMaxLength 10000
struct sourceStr{
char source[SourceMaxLength];
int pointer;
};
struct sourceStr sour;
char token;
int flag=1;
char getToken()
{
token=sour.source[sour.pointer];
sour.pointer++;
return token;
}
void getSource(FILE *fp)
{
}
void error()
{
flag=0;
printf("error;");
}
void S()
{
token=getToken();
if(token != 'p' && token!='q')
error();
else
{
if(token == 'p')
{
A();
}
else
{
B();
}
}
}
void A()
{
token=getToken();
if(token!='c'&&token!='a')
error();
else{
if(token=='c')
{
A();
token=getToken();
if(token!='d')
error();
}
else{
;
}
}
}
void B()
{
token=getToken();
if(token!='d'&&token!='b')
error();
else{
if(token=='d')
{
B();
}
}
}
int main()
{
sour.pointer=0;
strcpy(sour.source,"pccaadd");
S();
if(flag==1)
{
aprintf("success!");
}
else
{
printf("error");
}
return 0;
}
E::=TA
A::=+TA
A::=
T::=FB
B::=*FB
B::=
F::=(E)
F::=i
{(,i}
{+}
{),#}
{(,i}
{*}
{+,),#}
{(}
{i}
用c怎么写?