domingo, 24 de mayo de 2015

Este programa realiza la separacion de las reglas de producción por la izquierda y derecha y su alfabeto.

#include <iostream>
#include <cstdlib>
#include <fstream>

void producciones();
FILE *doc;
using namespace std;
int buscar (string v, string salida);
int buscar2 (string v, string salida);

int main(int argc, char** argv) {
      cout<<"\t\t\t\tREALIZADO POR"<<endl;
      cout<<"\t\t\tALBERTO ALEXIS ALVA MARTINEZ"<<endl;
      cout<<"\t\t\tCARLOS LOPEZ IBARRA\n"<<endl;
      cout<<endl;
      producciones();
      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 producciones(){

      ifstream letras("let.txt");
      ifstream produccion("reglasdeproduccion.txt");
      ofstream salidaderecha("produccionesderecha.txt");
      ofstream salidaizquierdo("produccionesizquierda.txt");
      ofstream alfabetoprodu("alfabetoproducciones.txt");
     
      char renglon3[200],r[100];
      string cad3, alfabeto3("");
      string cadena1;
      letras.getline(r,100);
      cadena1=r;
     
      string esp(" "),ladoizquierdo(""),temp,de(""),temp2;
      int simb,rango;
      while(!produccion.eof()){
            doc=fopen("produccionesizquierda.txt","a+");
            produccion.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;
            }
     
      }
      cout<<"reglas de produccion por la izquierda\n\n"<<ladoizquierdo;
      cout<<"\n\nreglas de produccion por la derecha\n\n"<<de;
      salidaizquierdo<<ladoizquierdo;
      doc=fopen("produccionesderecha.txt","a+");
      salidaderecha<<de;
      cout<<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<<"\n\ngramatica de las producciones\n\n"<<alfabeto3;
      doc=fopen("alfabetoproducciones.txt","a+");
      alfabetoprodu<<alfabeto3;
      cout<<endl;
      system("PAUSE");

}

PANTALLA DE SALIDA


0 comentarios :

Publicar un comentario