Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:
Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro

problema lexico en C

Preguntas y respuestas sobre el lenguaje de programacion C/C++

problema lexico en C

Notapor cmas el Jue Nov 01, 2007 9:20 pm

hola comunidad estoy en un problema que no puedo resolver i vengo buscando ayuda. Mi programa ya esta acavado pero al momento de ejecutarlo me genera tokens que yo no puse en el codigo nose, si tenga algun error en la tabla que no haya visto. aqui dejo mi codigo i la hoja de instrucciones que me dieron, muchas gracias de antemano.

#include <conio.h>
#include <stdio.h>
#include <ctype.h>
// ^ = ecepto
// a-z A-Z^ Hh D d Oo & X "a "c ( ) [ ] 0-7 8-9 . _ G-Z DEL EOF
int table[13][22] = {{ 1, 1, 1, 1, 1, 1, 10, 8, 9, -1, 11, -1, 12, -1, 4, 5, 6, -1, 1, 0, 1000},
{ 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 2, 1, 100, -1},
{ 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 3, 1, 100, -1},
{ 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, 1, 100, -1},
{ -1, -1, -1, 300, 300, 200, -1, -1, -1, -1, -1, -1, -1, -1, 4, 5, 6, -1, -1, 300, -1},
{ -1, -1, -1, 300, 300, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, 6, -1, -1, 300, -1},
{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 7, -1, -1, -1, -1, -1},
{ -1, -1, -1, 400, 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, 7, -1, -1, -1, 400, -1},
{ 1, 1, 500, 8, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 8, -1, -1, 8, -1, -1},
{ 9, 9, 9, 9, 9, 9, -1, 9, -1, 600, -1, -1, -1, -1, -1, -1, -1, -1, 9, -1, -1},
{ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 0, -1},
{ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 700, 11, 11, 11, 11, 11, 11, 11, -1, -1},
{ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 800, 12, 12, 12, 12, 12, -1, -1}};
// -1: Carter Invalido

int caracter(int ch)
{
if(ch>='a' && ch<='z') return 0;
else if(ch=='A' || ch=='B'|| ch=='C'|| ch=='D'|| ch=='E'|| ch=='F'|| ch=='G'|| ch=='H'|| ch=='I'|| ch=='J'|| ch=='K'|| ch=='L'|| ch=='M'|| ch=='N'|| ch=='O'|| ch=='P'|| ch=='Q'|| ch=='R'|| ch=='S'|| ch=='T'|| ch=='U'|| ch=='V'|| ch=='W'|| ch=='Y'|| ch=='Z') return 1;
else if(ch=='H' || ch=='h') return 2;
else if(ch=='D') return 3;
else if(ch=='d') return 4;
else if(ch=='&') return 5;
else if(ch=='X') return 6;
else if(ch=='"') return 7;
else if(ch=='"') return 8;
else if(ch=='(') return 9;
else if(ch==')') return 10;
else if(ch=='[') return 11;
else if(ch==']') return 12;
else if(ch=='0' || ch=='1' || ch=='2' || ch=='3' || ch=='4' || ch=='5' || ch=='6' || ch=='7') return 13;
else if(ch=='8' || ch=='9') return 13;
else if(ch=='.') return 14;
else if(ch=='_') return 15;
else if(ch=='G' || ch=='H'|| ch=='I'|| ch=='J'|| ch=='K'|| ch=='L'|| ch=='M'|| ch=='N'|| ch=='O'|| ch=='P'|| ch=='Q'|| ch=='R'|| ch=='S'|| ch=='T'|| ch=='U'|| ch=='V'|| ch=='W'|| ch=='X' || ch=='Y'|| ch=='Z') return 16;
else if(ch==' '|| ch=='\n' || ch=='\t' || ch==23) return 17;
else if(ch==27) return 18;
else return 19;
}

main()
{ char ch;
int edo=0,nedo;

clrscr();
while(edo!=1000)
{
if(edo>99)
{ printf(" Se genero el siguiente Token %d \n",edo);
edo =0;
}

ch=getche();

nedo=table[edo][caracter(ch)];
edo=nedo;


// printf("%d",ch);
}

printf(" Se genero el siguiente Token %d \n",edo);
getche();

}




:::::::INSTRUCCIONES:::::::

IDENTIFICADORES

1. Los identificadores pueden comenzar únicamente con letras.
2. después pueden venir letras, dígitos o el símbolo underline
3. no se puede terminar el identificador con un underline

ejemplos: Numero, uno_dos, _uno_123

NUMEROS ENTEROS

1. solo se aceptan dígitos del 0 al 9.
2. se deben terminar o no con una D o d
ejemplos: 123, 4d, 123D
NUMEROS REALES

1. se forman con dígitos decimales
2. se puede terminar o no con una D o d
3. pueden iniciar con un punto pero no pueden terminar con un punto
ejemplos: 123.4, 56.234, 32.00D
NUMERO OCTALES
1. se forman con los dígitos 0 al 7
2. deben terminar con O o o
ejemplos: 123O, 54312o
NUMEROS HEXADECIMALES
1. se forma de los dígitos 0 al 9 y las letras A,B,C,D,E,F en mayúsculas
2. deben terminar con una H o h
3. inician con X mayúscula
ejemplos: X121ABh, X324DCH
CONSTANTES STRING
Las constantes string se forman por una cadena de caracteres y se delimitan por dobles comillas.
Ejemplos: “string”
COMENTARIOS
Cualquier cadena de caracteres que se encuentra en la misma línea después del carácter (&), es considerada como un comentario hasta fin de línea.
&comentario asta fin de linea
OTROS OPERADORES Y CARACTERES ESPECIALES
( Paréntesis izquierdo ) paréntesis derecho
[ Corchete izquierdo ] corchete derecho
Dentro de los paréntesis y corchetes pueden recibir cualquier carácter ASCII.
cmas
Novato
Novato
 
Mensajes: 1
Registrado: Jue Nov 01, 2007 9:07 pm

Re: problema lexico en C

Notapor waltico el Vie Feb 01, 2008 10:57 pm

Hola, disculpa... la tarea nuestra es ayudarte... si podrias decirme donde esta el problema? si dices que tu programa esta acabado?

Token inexistentes... <<< Será porque te falta definirlo :lol:

Muestra los errores que te salen cuando compilas.
by: Oscar Walther Huanca Torres
Web: http://waltico.wordpress.com
E-Mail: walticogt + yahoo.com
Avatar de Usuario
waltico
Usuario Muy Activo
Usuario Muy Activo
 
Mensajes: 138
Registrado: Sab Jun 21, 2003 4:04 pm
Ubicación: Puno - Perú

Re: problema lexico en C

Notapor fjamett el Dom Abr 20, 2008 2:13 am

jajajaja si waltico tiene razon en que parte del tremendo!!!!! codigo esta tu problema
oye a priori se puede ver que u funcion "int caracter(int ch)" la podrias optimizar usando el codigo ascii y te evitaras hacer tantas lineas de codigo y si no me equivico haras menos comparaciones y sera mas optimo.

y que se supone que tiene que hacer tu programa?
fjamett
Novato
Novato
 
Mensajes: 6
Registrado: Dom Abr 20, 2008 1:31 am


Volver a C/C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados