Ejemplo n.º 1
0
 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);
 }