REGLAS DE PRODUCCIÓN
Código:
#include <iostream>
#include <cstdlib>
#include <fstream>
void alfabeto();
void reglas();
FILE *doc;
using namespace std;
int buscar (string v, string salida);
int buscar2 (string v, string salida);
int main(int argc, char** argv) {
alfabeto();
cout<<"t***REGLAS DE PRODUCCION***n"<<endl;
reglas();
return 0;
}
int buscar (string v, string salida){
for(int i=0;i<salida.length();i++){
if(v.compare(salida.substr(i,1))==0){
return -1;
}
}
return 0;
}
void alfabeto(){
ifstream le("alfabeto.txt");
ifstream entrada("texto.txt");
ofstream salida("alfabeto.dat");
ifstream produc("reglas.txt");
ofstream sderecho("terminales.txt");
ofstream sizquierdo("noterminales.txt");
ofstream alfaprodu("alfabetoproducciones.txt");
char renglon [100],r[100];
string cad, alfabeto("");
string cadena1;
string letra;
le.getline(r,100);
cadena1=r;
while(!entrada.eof()){
doc=fopen("alfabeto.dat","a+");
entrada.getline(renglon,100);
cad=renglon;
cout<<renglon<<"t";
cout<<"Tamanio: "<<cad.length()<<endl;
for(int i=0;i< cadena1.length(); i++){
for(int j=0;j< cad.length(); j++) {
if(cadena1.substr(i,1).compare(cad.substr(j,1) )==0){
if(buscar(cadena1.substr(i,1),alfabeto )==0){
alfabeto+=cad.substr(j,1) ;
}
}
}
}
}
cout<<"tnALFABETO-->"<<endl;
cout<<alfabeto<<endl;
doc=fopen("alfabeto.dat", "a+");
salida<<alfabeto;
cout<<endl;
}
void reglas(){
ifstream le("alfabeto.txt");
ifstream entrada("texto.txt");
ofstream salida("alfabeto.dat");
ifstream produc("reglas.txt");
ofstream sderecho("terminales.txt");
ofstream sizquierdo("noterminales.txt");
ofstream alfaprodu("alfabetoproducciones.txt");
char renglon3[200],r[100];
string cad3, alfabeto3(" ");
string cadena1;
le.getline(r,100);
cadena1=r;
string esp(" "),ladoizquierdo(""),temp,de(""),temp2;
int simb,rango;
while(!produc.eof()){
doc=fopen("noterminales.txt","a+");
produc.getline(renglon3,200);
cad3=renglon3;
temp2.assign(cad3);
temp.assign(cad3);
simb=cad3.find("->");
if(simb<=1000 && simb>=0){
rango=cad3.length()-(simb);
temp2.erase(0,simb+3);
temp.erase(simb,rango);
ladoizquierdo+=temp+esp;
de+=temp2+esp;
}
else{
}
}
cout<<"nEstos son los simbolos no terminales de las reglas de produccion-->n "<<endl;
cout<<ladoizquierdo<<endl;
cout<<"nEstos son los simbolos terminales de las reglas de produccion-->"<<endl;
cout<<de<<endl;
sizquierdo<<ladoizquierdo;
doc=fopen("terminales.txt","a+");
sderecho<<de;
cout<<endl<<endl;
for(int i=0;i< cadena1.length(); i++){
for(int j=0;j< de.length(); j++) {
if(cadena1.substr(i,1).compare(de.substr(j,1) )==0){
if(buscar(cadena1.substr(i,1),alfabeto3 )==0){
alfabeto3+=de.substr(j,1) ;
}
}
}
}
cout<<"t***GRAMATICA***n"<<endl;
cout<<alfabeto3<<endl;
doc=fopen("alfabetoproducciones.txt","a+");
alfaprodu<<alfabeto3;
cout<<endl<<endl;
system("pause");
}
Pantalla de salida:

Reglas de producción

  • 1.
    REGLAS DE PRODUCCIÓN Código: #include<iostream> #include <cstdlib> #include <fstream> void alfabeto(); void reglas(); FILE *doc; using namespace std; int buscar (string v, string salida); int buscar2 (string v, string salida); int main(int argc, char** argv) { alfabeto(); cout<<"t***REGLAS DE PRODUCCION***n"<<endl; reglas(); return 0; } int buscar (string v, string salida){ for(int i=0;i<salida.length();i++){ if(v.compare(salida.substr(i,1))==0){ return -1; } } return 0; } void alfabeto(){ ifstream le("alfabeto.txt"); ifstream entrada("texto.txt"); ofstream salida("alfabeto.dat"); ifstream produc("reglas.txt"); ofstream sderecho("terminales.txt"); ofstream sizquierdo("noterminales.txt"); ofstream alfaprodu("alfabetoproducciones.txt"); char renglon [100],r[100]; string cad, alfabeto(""); string cadena1; string letra; le.getline(r,100); cadena1=r; while(!entrada.eof()){ doc=fopen("alfabeto.dat","a+"); entrada.getline(renglon,100); cad=renglon; cout<<renglon<<"t"; cout<<"Tamanio: "<<cad.length()<<endl; for(int i=0;i< cadena1.length(); i++){ for(int j=0;j< cad.length(); j++) {
  • 2.
    if(cadena1.substr(i,1).compare(cad.substr(j,1) )==0){ if(buscar(cadena1.substr(i,1),alfabeto )==0){ alfabeto+=cad.substr(j,1); } } } } } cout<<"tnALFABETO-->"<<endl; cout<<alfabeto<<endl; doc=fopen("alfabeto.dat", "a+"); salida<<alfabeto; cout<<endl; } void reglas(){ ifstream le("alfabeto.txt"); ifstream entrada("texto.txt"); ofstream salida("alfabeto.dat"); ifstream produc("reglas.txt"); ofstream sderecho("terminales.txt"); ofstream sizquierdo("noterminales.txt"); ofstream alfaprodu("alfabetoproducciones.txt"); char renglon3[200],r[100]; string cad3, alfabeto3(" "); string cadena1; le.getline(r,100); cadena1=r; string esp(" "),ladoizquierdo(""),temp,de(""),temp2; int simb,rango; while(!produc.eof()){ doc=fopen("noterminales.txt","a+"); produc.getline(renglon3,200); cad3=renglon3; temp2.assign(cad3); temp.assign(cad3); simb=cad3.find("->"); if(simb<=1000 && simb>=0){ rango=cad3.length()-(simb); temp2.erase(0,simb+3); temp.erase(simb,rango); ladoizquierdo+=temp+esp; de+=temp2+esp; } else{ } } cout<<"nEstos son los simbolos no terminales de las reglas de produccion-->n "<<endl; cout<<ladoizquierdo<<endl; cout<<"nEstos son los simbolos terminales de las reglas de produccion-->"<<endl; cout<<de<<endl;
  • 3.
    sizquierdo<<ladoizquierdo; doc=fopen("terminales.txt","a+"); sderecho<<de; cout<<endl<<endl; for(int i=0;i< cadena1.length();i++){ for(int j=0;j< de.length(); j++) { if(cadena1.substr(i,1).compare(de.substr(j,1) )==0){ if(buscar(cadena1.substr(i,1),alfabeto3 )==0){ alfabeto3+=de.substr(j,1) ; } } } } cout<<"t***GRAMATICA***n"<<endl; cout<<alfabeto3<<endl; doc=fopen("alfabetoproducciones.txt","a+"); alfaprodu<<alfabeto3; cout<<endl<<endl; system("pause"); } Pantalla de salida: