神呀,救救我把(编译原理的课程设计)
题目:
对给定的文法,对输入的任意给定单词串采用递归下降分析程序判定是否为文法的合适
公式,为其构造语法树。
文法如下: S->a|^|(T)
T->T,S|S
要求动态显示语法分析过程和语法树的建立过程
我的思考:
首先给定的文法含有左递归,先消除它得到:
S->a|^|(T)
T->ST'
T'->,ST'|@ (好象键盘上没有空字,先用@代替一下)
然后试着给一个字符串分析一下
以(a,(a,a))为例 语法树略
然后分别写出S , T, T' 的过程
用一个数组存储字符串
void Advance();
void T();
void t2();
void S()
{ char sym;
if(sym=='a'||sym=='^')
Advance();
else if (sym=='(')
{
Advance();
T();
if(sym==')')
Advance();
else cout<<"error"<<endl;
};
else cout<<"error"<<endl;
}
void T()
{ S();
T2();
}
void T2()
{
if(sym==',')
{S();
T2();
}
}
int Advance(int i)
{i++;
return i;
}
然后怎么做,请大家帮忙,我是初学者用的是c++,不过请不要牵涉到控件什么的