Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <cstring>
- using namespace std;
- class productie
- {
- string stanga,dreapta;
- public:
- productie();
- productie(string s, string d);
- void determinaProductie(string s);
- void afiseaza();
- void determinaSimboluri(string& neterminale, string& terminale);
- };
- void citesteProductii(productie productii[], string& neterminale, string& terminale);
- void afiseazaSimboluri(string neterminale, string terminale);
- int main()
- {
- productie* p;
- string n,t;
- citesteProductii(p,n,t);
- afiseazaSimboluri(n,t);
- return 0;
- }
- productie::productie()
- {
- stanga=dreapta="";
- }
- productie::productie(string s, string d)
- {
- stanga=s;
- dreapta=d;
- }
- void productie::determinaProductie(string s)
- {
- int i;
- for(i=0;s[i]!='\0'&&(s[i]!='-'||s[i+1]!='>');i++)
- stanga+=s[i];
- if(s[i]=='\0')
- {
- cout<<"Productie gresita"<<endl;
- return ;
- }
- for(i+=2;s[i]!='\0';i++)
- dreapta+=s[i];
- }
- void productie::afiseaza()
- {
- cout<<"Stanga: "<<stanga<<" Dreapta: "<<dreapta<<endl;
- }
- void productie::determinaSimboluri(string& neterminale, string& terminale)
- {
- int i;
- for(i=0;stanga[i]!='\0';i++)
- {
- if(stanga[i]>='A'&&stanga[i]<='Z'&&neterminale.find(stanga[i])==string::npos)
- neterminale+=stanga[i];
- if(stanga[i]>='a'&&stanga[i]<='z'&&terminale.find(stanga[i])==string::npos)
- terminale+=stanga[i];
- }
- for(i=0;dreapta[i]!='\0';i++)
- {
- if(dreapta[i]>='A'&&dreapta[i]<='Z'&&neterminale.find(dreapta[i])==string::npos)
- neterminale+=dreapta[i];
- if(dreapta[i]>='a'&&dreapta[i]<='z'&&terminale.find(dreapta[i])==string::npos)
- terminale+=dreapta[i];
- }
- }
- void citesteProductii(productie productii[], string& neterminale, string& terminale)
- {
- ifstream f("in.txt");
- if(!f)
- {
- cout<<"Eroare la citire din fisier";
- return ;
- }
- int n,i;
- string s;
- f>>n;
- getline(f,s);
- productii=new productie[n];
- for(i=0;i<n;i++)
- {
- getline(f,s);
- productii[i].determinaProductie(s);
- productii[i].afiseaza();
- productii[i].determinaSimboluri(neterminale,terminale);
- }
- }
- void afiseazaSimboluri(string neterminale, string terminale)
- {
- int i;
- cout<<"N=";
- if(neterminale=="")
- cout<<"Ø";
- else
- {
- cout<<"{"<<neterminale[0];
- for(i=1;neterminale[i]!='\0';i++)
- cout<<", "<<neterminale[i];
- cout<<"}";
- }
- cout<<endl;
- cout<<"T=";
- if(terminale=="")
- cout<<"Ø";
- else
- {
- cout<<"{"<<terminale[0];
- for(i=1;terminale[i]!='\0';i++)
- cout<<", "<<terminale[i];
- cout<<"}";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement