comparacion de token

Iniciado por bash, 10 Julio 2010, 13:38 PM

0 Miembros y 1 Visitante están viendo este tema.

bash

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;
}
 
gracias por responder mis dudas

tragantras

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
Colaboraciones:
1 2

leogtz

Si especificaras qué es lo que quieres que haga el código sería mejor.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

nicolas_cof

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.

bash

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

gracias por responder mis dudas

.:BlackCoder:.

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
"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja




bash

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
gracias por responder mis dudas