void process(){ for (set<string>::iterator it=Vn.begin(); it!=Vn.end(); it++){ set< string > result1; for (int i=0; i<syntax.size(); i++){ if (*it == syntax[i].left){ vector< string > tt = get_first(syntax[i].right); for (int k=0; k<tt.size(); k++){ result1.insert(tt[k]); } } } first[*it] = result1; cout<<"First("<<*it<<") = "; for (set<string>::iterator t=result1.begin(); t!=result1.end(); t++){ cout<<*t<<" "; }cout<<endl; } set< string > result; result = get_follow("S"); follow["S"] = result; while (true){ bool flag = true; for (set<string>::iterator it=Vn.begin(); it!=Vn.end(); it++){ if (*it == "S") continue; result = get_follow(*it); if (follow[*it] != result){ follow[*it] = result; flag = false; } } if (flag) break; } for (set<string>::iterator it=Vn.begin(); it!=Vn.end(); it++){ cout<<"Follow("<<*it<<") = "; for (set<string>::iterator t=follow[*it].begin(); t!=follow[*it].end(); t++){ cout<<*t<<" "; } cout<<endl; } make_forecast(); vector< string > input; string str = "aaabd#"; for (int i=0; i<str.length(); i++){ string tmp = str.substr(i, 1); input.push_back(tmp); } analyse(input); }