求助:编译原理 语法分析

来源:百度知道 编辑:UC知道 时间:2024/05/18 06:14:43
我用数组的数据结构输入表达式进行语法分析,然后用递归子程序来分析,可是经过调试发现在f()里面同时对if与else都有输出!有什么方法可以让判断更加准确啊!
right初始为1,如果分析改变为0代表匹配失败!
刚学编译原理,希望各位高手能帮小弟一把,谢了!
源代码如下:
#include<stdio.h>
#include<malloc.h>
#include<iostream.h>
char *p=new char[10];

int i=0,right=1;
void e();
void e1();
void t();
void t1();
void f();
void e()
{
t();
e1();
}
void e1()
{
if(p[i]=='+'||p[i]=='-')
{
++i;
t();
e1();
}
else
{if(p[i]=='#'||p[i]==')')
return;
else
right=0;
}
}
void t()
{
f();
t1();
}
void t1()
{
if(p[i]=='*'||p[i]=='/')
{
++i;
f();
t1();
}
else{
if(p[i]=='#'||p[i]==')'||p[i]=='+'||p[i]=='-')
return;
else
right=0;
}

函数f()是对字符串p的第i个位置上的字符进行判断处理的,因此,“f()里面同时对if与else都有输出”是允许的,输出结果取决与变量i的不同取值。建议楼主在调试时,将变量i的值一并输出,可以看出,函数f()运行到字符串p中的哪个字符处了。

在f()里面同时对if与else都有输出??
其他我没看,只瞄了下if与else
if(right!=0) 应该是if(right!==0)
这好象不是c/c++