作业十一——LL(1)文法的判断,递归下降分析程序
判断是否为LL(1)文法
选取有多个产生式的求select,只有一条产生式的无需求select
同一个非终结符之间求交集,全部判断为空后则为LL(1)文法
求FIRST集
是每条产生式右边所出现的首个终结符的集合
求FOLLOW集
是针对非终结符,找到产生式右边跟在非终结符后的终结符,#为输入串的结束符
求SELECT集
当产生式不推导出ε时,就为FIRST 当产生式推到出ε时,就为(FIRST(A->ε)-{ε})∪FOLLOW{A}
2.法消除左递归之后的表达式文法是否是LL(1)文法?
3.接2,如果是LL(1)文法,写出它的递归下降语法分析程序代码
E() { T(); E'(); } E'(){ if('+') { matchtoken(+); T(); E(); } else if (')','#') { }//为空串时 else { errot; exit(0); }//错误提示 } T() { F(); T'(); } T'() { if('*') { matchtoken(*); F(); T'(); } else if ('+',')','#') {}//为空串时 else{ errot;exit(0); }//错误提示 } F(){ if('('){ E(); if(')'){ } else{ errot;exit(0); }//错误提示 } else if('i'){ matchtoken(i); } else{ errot;exit(0); }//错误提示 }
4.加上实验一的词法分析程序,形成可运行的语法分析程序,分析任意输入的符号串是不是合法的表达式。