viernes

5. OBTENER REGLAS DE PRODUCCION Y SIMBOLOS TERMINALES

"CÓDIGO DE PROGRAMACIÓN C++"


/* AUTOMATAS Y LENGUAJES FORMALES*/
/* AUTHOR: JUAN CARLOS CELESTINO GUILLERMO*/
/* ICO-19*/
#include <iostream>
#include <cstdlib>
#include <fstream>

void paso1();
void paso2();
FILE *doc;

using namespace std;
int buscar (string v, string salida);
int buscar2 (string v, string salida);

int main(int argc, char** argv) {
       cout << "Reglas de Produccion" << endl;
       paso2();
       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 paso2(){
       ifstream le("letras.txt");
       ifstream entrada("texto.txt");
       ofstream salida("alfabeto.dat");
       ifstream produc("regla_produccion.txt");
       ofstream sderecho("produccion_der.txt");
       ofstream sizquierdo("produccion_izq.txt");
       ofstream alfaprodu("alfabetoprod.txt");
      
       char linea3[200],r[100];
       string cad3, alfabeto3("");
       string cadena1;
       le.getline(r,100);
       cadena1=r;
      
      
       string esp("  "),ladoizquierdo(""),temp,de(""),temp2;
       int simbolo,rango;
       while(!produc.eof()){
       doc=fopen("produccion_izq.txt","a+");
       produc.getline(linea3,200);
       cad3=linea3;
       temp2.assign(cad3);
       temp.assign(cad3);
       simb=cad3.find("-->");
      
       if(simbolo<=1000 && simbolo>=0){
      
       rango=cad3.length()-(simbolo);
       temp2.erase(0,simbolo+3);
       temp.erase(simbolo,rango);
       ladoizquierdo+=temp+esp;
       de+=temp2+esp;
       cout<<cad3;
       cout<<endl<<endl;
}
       else{
       }
       cout<<"\n\nLas reglas de produccion por la izquierda son:\n\n"<<ladoizquierdo;
//     cout<<" \n\nLas reglas de produccion por la derecha son:\n\n"<<de;
       sizquierdo<<ladoizquierdo;
       doc=fopen("produccion_der.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<<"Los simbolos terminales son:\n\n"<<alfabeto3;
             doc=fopen("alfabetoprod.txt","a+");
             alfaprodu<<alfabeto3;
             cout<<endl<<endl;;
             system("pause");
}

"PANTALLA DE SALIDA .EXE"


No hay comentarios.:

Publicar un comentario