关于编译原理 递归下将分析程序

   编译原理实验要求构造一个地跪下将分析器,目标是能够对表达式进行自上而下语法分析,主要是识别i+i*i,我编的程序感觉是能实现分析,但不能判断是否符合语法
识别语法为:
E->T|E+T
T->F|T*F
F->i|(E)
程序的源代码为:
#include<iostream>
#include<string>
using namespace std;

bool F(string &str,char* &ip);
bool T(string &str,char* &ip);
bool E(string &str,char* &ip);
bool ADVANCE(string &str,char* &ip);


bool ADVANCE(string &str,char* &ip)
{
ip++;
return true;
}

bool F(string &str,char* &ip)
{
if(* ip=='i')
{
ADVANCE(str,ip);
cout<<"step F"<<endl;
}

else{
if(*ip=='(')
{
ADVANCE(str,ip);
E(str,ip);
if(*ip==')')
{
ADVANCE(str,ip);
cout<<"step F"<<endl;

}
else return false;
}
else return false;
}
return true;
}


bool T(string &str,char* &ip)
{
F(str,ip);
while(*ip=='*')
{
ADVANCE(str,ip);
cout<<"step T"<<endl;
F(str,ip);
}
return true;
}


bool E(string &str,char* &ip)
{
T(str,ip);
while(*ip=='+')
{
ADVANCE(str,ip);
cout<<"step E"<<endl;
T(str,ip);
}
return true;
}
int main()
{
string string1;
char* IP;
cout<<"请输入要分析的表达式:";
cin>>string1;
cout<<endl;
IP=&string1[0];

if(E(string1,IP))
{
cout<<"输入表达式符合已知文法!"<<endl;
}
else cout<<"输入表达式不符合已知文法!"<<endl;
return 0;
}
程序不管怎样多承认符合语法,因为E函数返回的是TRUE,不能反悔FALSE,我想了好长时间也不知干怎样改,才能对给出的表达式进行分析是否符合语法,感觉应该是E函数的循环那地方的问题,希望哪位能指点一下,帮我解决这个问题。

你可能感兴趣的:(F#)