Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: bash en 10 Julio 2010, 13:38 PM

Título: comparacion de token
Publicado por: bash en 10 Julio 2010, 13:38 PM
buenas a todos

estoy intentado hacer un analizador lexico para una clase que estoy creando pero como soy un poco novato en esto necesito un poco de ayuda.

el program comipla bien y hasta tiene un poco de exito en la compilacion del codigo pero como siempre con un porcentaje de error, ahi esta el codigo.

Código (cpp) [Seleccionar]
int main()
{
    char *token[]={"hola","creado", "interna_creado"};
    char *p =new char;
    cin >>p;

    for(int i = 3;i>0; i--)
    {
        if(p== token[i])
        {
            cout << "Token encontrado" <<token[i]
                 << "en la poscion "<< i<<endl;
        }else cout <<"token no enontrado";
    }

   delete p;

    return 0;
}
 
Título: Re: comparacion de token
Publicado por: tragantras en 10 Julio 2010, 14:41 PM
ehmmm

new char??

no sería new char[longitud] ? Estás reservando memoria para UN caracter.

Luego comparas un caracter con... una posicion de memoria de un array? O,o
para comparar cadenas usa strcmp(cadena1,cadena2)



PD: si he dicho alguna barbaridad perdonadme, yo soy de c no de c++, el operador new es como chino jaja
Título: Re: comparacion de token
Publicado por: leogtz en 10 Julio 2010, 21:45 PM
Si especificaras qué es lo que quieres que haga el código sería mejor.
Título: Re: comparacion de token
Publicado por: nicolas_cof en 10 Julio 2010, 23:26 PM
kalix_9, aca te dejo un codigo en C de mas o menos la interpretacion de di yo de lo que queres :P, igual cabe aclarar que es un ejemplo muy basico...

Concuerdo con Leo Gutiérrez., tendrias que ser mas especifico a la hora de plantear tu problema...

#include <stdio.h>
#include <string.h>

int main( void )
{
    char *token[] = { "hola", "creado", "interna_creado" };
    char c;

    scanf( "%c", &c );

    for ( int i = 0; i < 3; ++i )
    {
        for ( int j = 0; j < strlen( token[i] ); ++j )
        {
            if ( c == token[i][j] )
                printf( "Token %c encontrado en la posicion %d\n", token[i][j], i );
            else
                puts( "Token no encontrado" );
        }
    }
   
    return 0;
}


Salu10.
Título: Re: comparacion de token
Publicado por: bash en 11 Julio 2010, 00:02 AM
hola , gracias por responder .

lo que quiero es hacer una especie de analizador lexico , pero primero tengo que enteder como comparar cadenas completas si usar ninguna funcion especial de el espacio  std ni de ninguna lib. 

y pense que con un array de una dimension bastaria para poder hacer una comparacion

Título: Re: comparacion de token
Publicado por: .:BlackCoder:. en 11 Julio 2010, 00:25 AM
No se q es un "analizador lexico" pero interpretando tu code, pareciera q lo que quieres es que busque una letra en una palabra... Y para eso te sirve el code de nicolas_cof... pero como hablas de comparar cadenas... pes pareciera que quieres buscar una palabra en la lista de palabras q tienes... para eso pes haz tu mismo una funcion que compare las cadenas... ya q duce q no quieres usar ninguna funcion hecha...

Saludos...

PD: Estoy casi seguro q en el foro hay ejemplos de como hacerlo
Título: Re: comparacion de token
Publicado por: bash en 11 Julio 2010, 01:30 AM
analisador lexico podria ser una funcion que busque una palabra en una oracion dentro de un texto por ejemplo

Código (cpp) [Seleccionar]


//no es code real
char *t[/*SIZE*/] = "ORACION MUY LARGA Y TEDIOSA...";


funcion_BUSCA_PALABRA("MUY",t);



claro es un ejemplo ya que podrias definir un analisador lexico como otros tipo de funcion solo me refiero a algo basico.

otro seria lo que usan los compiladores para para revisar sintaxis.

como muchas gracias por todo