Foro de elhacker.net

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
  1. int main()
  2. {
  3.    char *token[]={"hola","creado", "interna_creado"};
  4.    char *p =new char;
  5.    cin >>p;
  6.  
  7.    for(int i = 3;i>0; i--)
  8.    {
  9.        if(p== token[i])
  10.        {
  11.            cout << "Token encontrado" <<token[i]
  12.                 << "en la poscion "<< i<<endl;
  13.        }else cout <<"token no enontrado";
  14.    }
  15.  
  16.   delete p;
  17.  
  18.    return 0;
  19. }
  20.  
 


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...

Código:
#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
  1.  
  2. //no es code real
  3. char *t[/*SIZE*/] = "ORACION MUY LARGA Y TEDIOSA...";
  4.  
  5.  
  6. funcion_BUSCA_PALABRA("MUY",t);
  7.  
  8.  

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