資源簡介
文法:E->TE'
E'->+TE'|ε
T->FT'
T'->*FT'|ε
F->(E)|i
構(gòu)造上述LL(1)文法的遞歸下降分析程序
代碼片段和文件信息
/*試構(gòu)造如下LL(1)文法的遞歸下降分析程序
文法:?見書本62頁?(4.2)
????E->TE‘
????E‘->+TE‘|ε
????T->FT‘
????T‘->*FT‘|ε
????F->(E)|i
??________________________________________________
????FIRST(E)={(i}??
????FIRST(E‘)={+ε}????????FOLLOW(E‘)={)#}
????FIRST(T)={(i}?????? ???
????FIRST(T‘)={*ε}????????FOLLOW(T‘)={+)#}
????FIRST(F)={(i}
????
注:因為E‘T‘可能會自動匹配所以要用到它們的FOLLOW集
*/
#include
#include
#include
char?ch;
FILE?*fp1;?
int?e()
{
????if(ch==‘(‘||ch==‘i‘)
????{
????????if(t()==1)
????????{
????????????if(eprime()==1)?return?1;
????????}
????}
????return?0;
}
int?t()
{
????if(ch==‘(‘||ch==‘i‘)
????{
????????if(f()==1)
????????{
????????????if(tprime()==1)?return?1;
????????}
????}
????return?0;
}
int?eprime()
{
????if(ch==‘+‘)
????{
????????ch=fgetc(fp1);
????????if(t()==1)
????????{
????????????if(eprime()==1)?return?1;
????????????else?return?0;
????????}
????????else?return?0;
????}
????else?if(ch==‘)‘||ch==‘#‘)
??
評論
共有 條評論