C 實現first集follow集

2021-09-29 12:30:06 字數 916 閱讀 3553

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集...