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

编译原理实验要求构造一个地跪下将分析器,目标是能够对表达式进行自上而下语法分析,主要是识别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函数的循环那地方的问题,希望哪位能指点一下,帮我解决这个问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值