1.「@」代替字元「ε」
2.同一非終結符如有多條產生式必須寫成一行,中間用「|」分隔,不允許有空格
**存在很多問題,大量「非正常」情況都未考慮,謹慎參考
#include#include#include#includeusing namespace std;
struct exp;
vectorv; //產生式集合
string t = ""; //終結符集合
string first[20]; //所有非終結符的first集
string f =""; //follow集
//將檔案中的文法轉換成產生式
void fun1(string str) else if(e.nonter[k][i] >= 'a'&&e.nonter[k][i] <= 'z')else
}} } }
void fun2()
}//求follow集
void follow(char a) else if(j < v[i].nonter[k].length()-1) else
} if(first[m].find('@') != string::npos)} }
}} }
}int main()
string::iterator it;
//除去@,因為follow集中不能有@(空轉)
怎麼求 first集 follow集
判斷該文法是不是ll 1 文法,說明理由 s abc a a b b first集合求法就是 能由非終結符號推出的所有的開頭符號或可能的 但要求這個開頭符號是終結符號。如此題a可以推導出a和 所以first a a,同理first b s可以推導出abc,還可以推導出bc,還可以推導出c,所以fir...
FIRST集 FOLLOW集 和 SELECT集
first a 為a的開始符或者首符號集。設g vt,vn,s,p 是上下文無關文法 first 特別的,若 能推導出 則規定 first 若x vt,則first x 簡單講,終結符的first集就是它本身 若x vn,且有產生式x a a vt,則 a first x x 則 first x 簡...
怎樣求FIRST集與FOLLOW集
文法 s abc a a b b first集合求法 能 由非終結符號推出的所有的開頭符號或可能的 但要求這個開頭符號是終結符號。如此題a可以推導出a和 所以first a a,同理 first b s可以推導出abc,還可以推導出bc,還可以推導出c,所以first s a,b,c follow集...