1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| #include <iostream>
#include <string>
#include <vector>
std::vector<std::vector<std::string>>productionstete(std::string tete,std::vector<std::vector<std::string>>const &grammaire_s);
int main(){
std::vector<std::vector<std::string>>grammaire_s={
{"S","A","a"},
{"S","b"},
{"A","A","c"},
{"A","S","d"},
{"A","epsilon"}
};
std::string tetej,tete;
std::vector<std::string>gamma;
std::vector<std::vector<std::string>>P;
for(size_t i=0;i<grammaire_s.size();i++)
for(size_t j=0;j<i;j++)
if(grammaire_s[j][0]==grammaire_s[i][1]){
tetej=grammaire_s[j][0];
P=productionstete(tetej,grammaire_s);
gamma=grammaire_s[i];
gamma.erase(gamma.begin(),gamma.begin()+2);
tete=grammaire_s[i][0];
grammaire_s.erase(grammaire_s.begin()+i);
for(auto p:P){
p.insert(p.end(),gamma.begin(),gamma.end());
grammaire_s.insert(grammaire_s.begin()+i,p.begin(),p.end());
}
}
for(auto p:grammaire_s){
for(auto s:p)
std::cout<<s<<' ';
std::cout<<std::endl;
}
}
std::vector<std::vector<std::string>>productionstete(std::string tete,std::vector<std::vector<std::string>>const &grammaire_s){
std::vector<std::vector<std::string>>sortie;
for(auto p:grammaire_s)
if(p[0]==tete)
sortie.push_back(p);
return sortie;
} |
Partager