c++ : ayuda para realizar analizador lexico....

Publicado en 'Programación' por Dark Zero, 10 Dic 2009.





  1. Dark Zero

    Dark Zero Miembro de oro

    Registro:
    21 Ene 2009
    Mensajes:
    7,200
    Likes:
    1,668




    hola chicos, es mi primera vez en programar un programa para c++ de hace tiempo y tengo algunos problemas...

    actualmente estoy haciendo un analizador lexico y tengo este código...


    #include <cstdlib>
    #include <iostream>
    #include <string.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    using namespace std;
    const int x=5;
    const int y=7;
    const int k=7;

    int main()
    {
    int c,d;
    int cad;
    int arr[x][y]={2,6,6,6,6,6,6,6,2,3,6,6,6,6,6,6,4,6,6,6,6,6,6,6,4,5,6,6,6,6,6,6,6,6,5};
    char sim[k]={'$','a','b','c','d','e','f'};
    cout<<"\tBienvenido al programa de analizador lexico en c++\n" ;
    Sleep(2000);
    cout<<"\tVersion: BETA 0.1\n" ;
    Sleep(2000);
    cout<<"\tAqui Comenzamos...\n" ;
    Sleep(2000);
    system("CLS");


    cout<<"\n\n\n";
    cout<< " \t COLUMN\n";
    cout<< " \t1 2 3 4 5 6 7";
    cout<< " \n\t-------------";
    for(c=0;c<x;c++)
    {
    cout<<"\nROW "<<c+1<<"\t";
    for(d=0;d<y;d++)
    {
    cout<<arr[c][d]<<" ";
    }
    }
    cout<<"\n\n\t";
    for(int r=0;r<k;r++)
    {cout<<sim[r]<<" ";}
    cout<<"\n\n\tIngrese cadena: ";cin>>cad;

    cout<<"\n\n\n";
    cout<<"\nVerificando cadena";
    for(int k=0;k<3;k++)
    {
    Sleep(1000);
    cout<<".";
    }
    cout<<"\n";
    for(c=0;c<x;c++)
    {
    for(d=0;d<y;d++)
    {
    if(arr[c][d]==cad)
    {

    }
    else
    {cout<<"\n\tCadena erronea\n";goto Final;}
    }
    }
    cout<<"\n\tCadena correcta\n";
    Final:
    system ("PAUSE");
    return 0;
    }


    lo que quiero es :
    1.- separar los componentes de la cadena
    2.- Hacer una relacion entre la matriz multidimensional y la unidimensional,
    en si el problema es asi:
    quiero que cuando se ponmga una cadena de caracteres, ejem: $abcdef , sean separadas y se reconoscan...

    aqui una imagen del ejercicio

    [​IMG]

    ya esta desarrollada la tabla y lo que quiero es ver como puedo hacer funcional el codigo del analizador lexico...
     


  2. CM PUNK

    CM PUNK Miembro maestro

    Registro:
    29 Abr 2007
    Mensajes:
    620
    Likes:
    5
    diculpa, pero tu post tiene algo que ver con Lenguajes formales y automatas?
     
  3. Dark Zero

    Dark Zero Miembro de oro

    Registro:
    21 Ene 2009
    Mensajes:
    7,200
    Likes:
    1,668
    mmm, es c++ en si y es para hacer un analizador lexico y si, tiene automatas que determinan en si , si es corracta o no la cadena

    PD: aqui esta mi programa, si hay algun problema ayudenme. Esta en DevC++:

    #include <cstdlib>
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    #include <string>
    using namespace std;
    const int c=5;
    const int d=7;
    const int k=7;

    int main()
    {
    int x=1,y,z=1;
    string cad;
    int arr[c][d]={2,6,6,6,6,6,6,6,2,3,6,6,6,6,6,6,4,6,6,6,6,6,6,6,4,5,6,6,6,6,6,6,6,6,5};
    char sim[k]={'$','a','b','c','d','e','f'};
    cout<<"\tBienvenido al programa de analizador lexico en c++\n" ;
    Sleep(2000);
    cout<<"\tVersion: BETA 0.1\n" ;
    Sleep(2000);
    cout<<"\tAqui Comenzamos...\n" ;
    Sleep(2000);
    system("CLS");


    cout<<"\n\n\n";
    cout<< " \t COLUMN\n";
    cout<< " \t1 2 3 4 5 6 7";
    cout<< " \n\t-------------";
    for(x=0;x<c;x++)
    {
    cout<<"\nROW "<<x+1<<"\t";
    for(y=0;y<d;y++)
    {
    cout<<arr[x][y]<<" ";
    }
    }
    cout<<"\n\n\t";
    for(int r=0;r<k;r++)
    {cout<<sim[r]<<" ";}

    cout<<"\n\n\tIngrese cadena: ";cin>>cad;
    for(int cd=0; cd<cad.length();cd++)
    {cout<<"\t"<<cad[cd];

    }
    cout<<"\n\n\n";
    cout<<"\nVerificando cadena";
    for(int g=0;g<3;g++)
    {
    Sleep(1000);
    cout<<".";
    }
    cout<<"\n";

    for(x=0;x<c;x++){

    while(z<cad.length())
    retorno:
    { for(y=0;y<d;y++)
    {
    if(cad[z]=='$')
    {
    if (x=1)
    { arr[x][y]=2;z++; }
    else{arr[x][y]=6;z++; }
    }
    else if(cad[z]=='a')
    {
    if (x=2)
    { arr[x][y]=2;z++ ;goto retorno ; }
    else{arr[x][y]=6; z++ ; goto retorno; }

    }
    else if(cad[z]=='b')
    {

    if (x=2)
    { arr[x][y]=3;z++; }
    else{arr[x][y]=6;z++; }

    }
    else if(cad[z]=='c')
    {

    if (x=3)
    { arr[x][y]=4;z++; }
    else{arr[x][y]=6;z++; }

    }
    else if(cad[z]=='d')
    {

    if (x=4)
    { arr[x][y]=4;z++; goto retorno ; }
    else{arr[x][y]=6;z++; goto retorno; }

    }
    else if(cad[z]=='e')
    {

    if (x=4)
    { arr[x][y]=5;z++; }
    else{arr[x][y]=6;z++; }

    }
    else if(cad[z]=='f')

    {
    if(arr[x][y]=5)
    {cout<<"\n\tCadena correcta\n";goto Final;}
    else
    {cout<<"\n\tCadena incorrecta\n";goto Final;}
    }
    else {cout<<"\n\tCadena incorrecta\n";goto Final;break;}
    }
    }}



    Final:
    system ("PAUSE");
    return 0;
    }


    en si debe detectar si la cadena es correcta o no... un error es cuando se pone une f al final detectara como cadena correcta, aun cuando esta mal ordenada la cadena...
     
    Última edición: 13 Dic 2009