Analizador lexico

La semana pasada la ocupe para una sola cosa: diseñar y programar un analizador lexico para C#. Ya lo entregue a mi profesor y parece que todo marcha bien, asi que me atrevere a publicarlo como Software Libre.

Primero que nada, hay que definir que un analizador lexico es el encargado de leer caracter por caracter de un archivo (que contenga codigo fuente escrito en algun lenguaje de programacion especifico) y construir elementos lexicos llamados Patrones que serán utilizados posteriormente por un analizador sintactico. Un patron es una pareja ordenada compuesta por un token y un lexema. Un token es el elemento lexico del lenguaje, es decir el simbolo terminal de una gramatica libre de contexto (GLC). Y por ultimo, un lexema es la secuencia de caracteres que coinciden con un token.

El siguiente, es un ejemplo del analisis lexico para el lenguaje C:

archivo_fuente.c

#include<stdio.h>
main(){
printf("Hello world");
}

Tras procesar el codigo con un analizador lexico, este genera los pares ordenados (Token, Lexema):

tokens.txt

Gatito, #
PalabraReservada, include
MenorQue, <
Libreria, stdio.h
MayorQue, >
PalabraReservada, main
ParentesisIzq, (
ParentesisDer, )
LlaveIzq, {
PalabraReservada, printf
ParentesisIzq, (
Texto, "Hello world"
ParentesisDer, )
PuntoYcoma, ;
LlaveDer, }

Bueno pues, para crear el analizador lexico que me pidieron en la materia de compiladores, primero tuve que hacer una lista con todas las palabras reservadas, los operadores y los simbolos empleados en C#.

Despues, hice el diagrama de un Automata Finito Determinista (AFD.jpg) para reconocer los estados finales de la gramatica.
Partiendo del estado 1 y con un caracter de entrada se determina el camino que se ha de seguir; cuando se llega a un estado de aceptacion N, se continua analizando el siguiente caracter pero comenzando nuevamente por el estado 1

Por ejemplo, partiendo del estado 1 del automata; si se lee un caracter del archivo de entrada y es un corchete izquierdo: [
En el automata, se cambia de estado o “nos movemos” al estado 55 y luego, al leer el siguiente caracter, sin importar que sea una letra, digito, simbolo, espacio en blanco, nueva linea, o cualquier otra cosa: se va al estado siguiente del automata, que es el 56; el cual está marcado como un estado de aceptacion [es cuando se crea un patron].
Despues de eso, el punto de partida es nuevamente el estado 1 y dependiendo del caracter que se lea a continuacion; se cambiara a otro estado hasta llegar a un estado de aceptacion. El proceso termina hasta que se encuentra un fin de archivo (EOF).

[recomiendo ver el diagrama del automata para comprender mejor la explicacion]

Finalmente; aqui está mi trabajo [liberado con licencia GNU – GPL].
Este es el codigo fuente escrito en C.
Aqui esta el ejecutable para M$-DO$ [TurboC de Borland tiene muy buenas librerias para el manejo de strings]
Aqui esta un ejemplo del lenguaje C#
Por ultimo, aqui esta la version del proyecto en pdf

Cualquier duda o sugerencia: dejarla en los comentarios.

La siguiente fase del proyecto es crear un analizador sintactico… si todo va bien, quizas lo publique aqui.

Actualización (12/Dic/2009):

Ojalá que todos aquellos que han creado un analizador léxico como un proyecto escolar y han tenido éxito, puedan compartir con toda la comunidad su trabajo ya que el conocimiento cuando se comparte es más enriquecedor, y precisamente en esta tesitura, Tonny ha creado un analizador para C# en monodevelop 2.2 sobre Debian squeeze además ha publicado en su blog bajo licencia GNU GPL v3 o superior todo el código fuente de su proyecto como parte de la filosofía de aprender, hacer y compartir.

Saludos.

159 pensamientos en “Analizador lexico

  1. Necesito que me mandes porfa todo lo que
    publicastes pues desde aqui no se ve tu servidor
    y lo necesito mucho, si tuvieras la gentileza
    de mandarmelo por correo te lo agradeceria infinitamente
    muchas gracias vip. por si no lo vez mi correo es
    yananliur@hotmail.com

  2. definitivamente no te voy a mandar tu tarea a tu correo. osea; ¿por quién me tomas?

    Intenta mas tarde, el servidor andará fuera de línea por un par de horas pero si funciona.

  3. la verdad es muy buen trabajo el analizador lexico, yo hice uno para MicroC, un proyecto de la facultad. solo que no lo hice con una matriz de transicion, y se me hubiera facilitado mucho con esto. echale ganas y adelante

  4. Gracias por el comentario Lariash. Este proyecto fue para la materia de compiladores y realmente me costó bastante noches, lo puse en línea confiando en que las personas que lo encuentren, lo consideren util y como material de apoyo.

    Saludos Lariash.

  5. Hola, he visto tu trabajo realmente esta muy bueno, a mi me ha tocado hacer un analizador lexico tambien para mi clase de compiladores, solo que mi problema esque no me han dicho para que lenguaje lo quieren asi que intuyo que es general, asi que estoy que paso noches pensando como lo termino y la verdad sera el cansancio pero ya no me da se me traba pero realmente me sorprende el tuyo tomare tu idea y vere si me da lo de la matriz, gracias por la ayudita, y sigue adelante tienes un gran talento.

  6. Angeles: Adelante, tomalo como ejemplo o si gustas realizarle alguna mejora al codigo fuente publicado aquí, no hay problema. La intención es que sea útil para otras personas.

    Saludos y paz.

  7. Hola tengo una duda. Cuando abre el .exe de ms-dos de tu analizador lexico me pide el nombre de un archivo…

    Como lo devo escribir?, la ruta completa o solo el nombre del archivo..

    Ya intente de las 2 formas y no me da resultado..

    Gracias, PD. Es muy interesante el codigo pero si pudieras explicar el codigo te lo agradeceria ya que necesito hacer uno pero en Visual basic .net para que analize programitas escritos en visual basic….

    De antemano Gracias

  8. jejejeje si quieres, te lo hago en visual basic, para que te sea más sencillo entregar tu proyecto escolar ;-)

    Damm it!

  9. No no es necesario, solo necesito que me expliques (si puedes y quieres claro) como funciona…

    Con respecto a lo e que no puedo abrir el archivo….????

  10. Hola:
    Bueno pues checando tu trabajo esta muy bien… Sabes yo necesito realizar una analizador lexico pero ya sea para pascal o para c++ o para visual basic, asi k espero k checando mas adetalle tu trabajo pueda generar una idea para mi proyecto de fin de semestre.

    bueno un gusto

    Sigue adelante y suerte

  11. chikos yo si necesito un analizador lexico pero en java hice uno pero no le gusto mucho al maestro y medio chanse para entregarse lo el lunes 28 de mayo asi k si me pueden ayudar se los agradecere mucho y si es en basic les encargo el programa

    muchas gracias de vdd

    avalanch_2002@hotmail.com

  12. hola amigo mi nombre es luis raciel me dicen rashy me gustaria saber si me podrias proporcionar tu analizador o tus automatas para poder checarlo y te prometo que cualquier modificion lapublicare en esta pagina solo quiero checarlo para un proyecto escolar que tengo mi correo es Luis_raciel@hotmail.com espero me des respuesta muy pronto

  13. GUAPO Y ADEMAS INELIGENTE, MUY BIEN CREO QUE ME SERA DE UTILIDAD ES MUY INTERESANTE TU CODIGO AMIGO, GRACIAS

  14. oye se ve interesante, yo ando haciendo uno analizador = para mi materia de prog. de sistemas 2.
    leere tu trabajo haber que tal, con respecto alas personas que necesitan analizadores para java, c++…

    c# se basa en esos lenguajes, es solo una adaptacion minima….

  15. Pues mira, mi estimado Valar: Para serte honesto, tu programita me ha servido más que todas las clases que he tomado de Programación de Sistemas donde estamos viendo el compilador. Por fin le entendí a los famosos Autómatas Finitos Deterministas y sigo exprimiéndole todo lo que puedo. De veras, te estoy muy agradecido por haberlo publicado en la Web. Una cosa que me serviría mucho saber es si la matriz la sacaste directamente del AFD o tienes por ahí otro archivo u otras anotaciones de cómo crearla. Yo estoy tratando de integrarla de la que ya hiciste y del AFD que publicaste. Cualquier comentario será muy requete bienvenido.
    Saludos
    Liniud

  16. Hola:
    Oye ya me aventé el analizador léxico y ahora voy por el sintáctico pero no le agarro la onda, tienes alguna sugerencia o algo de información que me pueda ser útil??? Es para un proyecto de programación de sistemas, tengo que hacer un monitor de cobertura, después del sintáctico tengo que hacer el semático pero todavía no empiezo con el sintáctico : S.
    Gracias.
    Joyce

  17. no seas malito puedes enviarme el codigo fuente del analizador lexico para pascal hecho en c.

    gracias

  18. hola colega encontre tu sitio pork ando indagando como realizar un analizador lexico, encontre k hiciste uno en c# pero no pude ver el codigo okas si me lo puedes proporcionar t lo agradeceria va. lo que pasa que tenfo k hacer uno pero en java por cuestiones d tiempo no lo he podido hacer me gutaria darme referencias con tu trabajo de antemano muchas gracias.
    att. viktor

  19. oye necesito q me hagas el favor y si me pudieras enviar el codigo del analizador es q de eso depende mi semestre te lo agradeceria mucho.. en cualquier otra ocasion de recompensaria…. ojala me pudieras ayudar

    sirdussan85@msn.com

  20. hola q tal valar disculpa la molestia vi que tienes un codigo del analizador lexico sintactico en visual basic y me interesariaver si me facilitas tu codigo para hacerle una modificacion para un programa q debo hacer (debo añadirle funciones de notacion polaca) entonces quiero ver si me puedes dar el link de donde esta

  21. Saludos. Estaba buscando información para crear un analizador léxico y por casualidad me encontré el tuyo. Le entiendo un poco el cómo funciona gracias a la pequeña reseña que hiciste, sin embargo; me gustaría ver el diagrama del autómata ya que no lo puedo ver. me marca error. Si me lo pudieras mandar a mi mail te lo agradecería mucho.

    se ve muy interesante el programa.

    ¿lo podría usar y modificarlo? soy de lázaro cárdenas mich.

  22. vi tu articulo y me parecio muy interesante tu analisis, me gustaria que lo enviaras a mi correo para revisar la estructura de tu codigo y ver si puedo modificarlo (claro con tu autorizacion desde luego) y si podrias agregara tu automata porque no me dejo abrirlo (como que el link esta roto)..

    de antemano Gracias
    SALU2

  23. Que onda, mira necesecito hacer un analizador y manejar archivos, no se como hacerlo y como tu lograste hacerlo me gustaria me prestaras tu codigo, la verdad voy a implementarlo en Java y me gustaria mucho me mandaras tu codigo a mi correo, si puedes claro te lo agradecere demasiado.
    Te lo pido de esta manera pues el servidor no esta disponible. Gracias de antemano companero.

  24. oye si me podrian decir como crear un analizador lexico en visual basic 6 por fa es que necesito saber como se hace y no tengo ni idea de como hacerlo si alguien me puede decir como hacerlo por fa envienmelo a mi correo por fa es aker134@hotmail.com por fa

    gracias

  25. Un saludo cordial para VALAR, a que direccion de correo puedo contactarte, ya que me gustaria preguntar algunas cosas acerca de implementacion del codigo fuente que gentilmente haz publicado en este sitio.

    Por tu atecion, mil gracias…

    Atte. Jorge

  26. Jorgue Rodríguez: gracias por el saludo y puedes ponerte en contacto conmigo en la siguiente dirección de correo: javier.camacho (en) dgb.buap.mx

    saludos!

  27. Hola Javier:

    Tu articulo es muy interesante, lo tome como ejemplo para terminar el analizador que yo estoy haciendo y que me quito el sueño por varios dìas.

    Mil gracias

  28. Hola Rosy: Comprendo perfectamente a que te refieres, a mi también me quitó el sueño por muchas semanas.

    Saludos y que te sea leve!

  29. ESTA MUY BIEN TU ANALIZADOR LEXICO, PERO DESPUES DE ESO SUPONGO Q YA IMPLEMENTASTE EL SEMANTICO…..

    COMO ESTARIA ECHO¡?¡¡

    SALUDOS….

  30. saludos amigo, queria pedirte si eres tan amable de enviarme codigo fuente del analizador lexico, estoy investigando hacerca de tema y tu analizador me ayudaria bastante… Gracias.

  31. hola… creo ke todos los ke entramos a esta pagina… necesitamos un analizador lexico… el cual nos ha kitado el sueño por noches…. la verdad. nos se como hacerlo. peor lo necesito…… para poder.. tomarlo como ejemplo.. y pues keria ver si me podias enviar el codigo ami correo.. digo si no e smucha la molestia…bueno muchas gracias por haber leido.. este mensaje…

  32. hola!!!
    este comen solo es para felicitarte pke la verdad si esta muy cañon la clase de compiladores, tu ar{iculo esta super interesante…
    congratulations ;D

  33. hola! muy buen trabajo el analizador lexico, solo tengo un par de pregunta es que yo lo estoy haciendo pero en Java, estaba mirando en codigo y me sirve lo voy a empezar hacer el mio, en base al tuyo, hay varias cosas que no entiendo crees que me puedas ayudar, como para jalar en archivo y lo que esta al final creo que es una matriz. O alguien que me diga como lo puedo hacer en Java, muchas gracias y esta muy bueno el articulo.

  34. Excelente Trabajo, ami tambien me toca hacer un AL :) para el curso de Compiladores. si todo va bien voy a publicarlo.

  35. Hola soy programador de java de corazon realemnte me sorprendio esto esta bien hecho aunque puedes mejorar y reducir codigo, yo esoty haciendo uno pero con swing, estoy utilizando tu logica para el analizador y tu diagrama de estados …Gracias tocayo
    SOY dE GUERRERO, quien dice que nosotros somos ignorantes estoy estudiando ingenieria en mex y todos la gran mayoria son una bola de webones presumidos, solo al qe le quede el saco, pero con esto me da alegria ser guerrrerense …
    viva guerrero
    y la costa chica
    un saludo valar

  36. A ver si luego publicas tu proyecto en Java, porque yo la vdd no programo ni el “Hello World” en ese lenguaje, ahora me dedico mas al PHPOO.

    Un saludo colega!!

  37. ESE ANALIZADOR ESTA MUY BUENO, PERO QUERIA QUE ME DIJERAS EL SIGNIFICADO DE CADA VARIABLE PARA PODER ANALISARLO MEJOR, TE LO AGRADEZCO, ES PARA MI TRABAJO DE COMPILADORES…..
    TE PIDO QUE ME LO ENVIES A MI E-MAIL SE PUEDES
    GRACIAS DESDE YA!!!

  38. Un gran trabajo, creo que a todos nos sirve vastante, Muchas gracias por publicarlo y suerte en tus proximos proyectos.

  39. Excelente trabajo creeme que he entendido mas tu código fuente que la bola de hojas de papel que el profr. de la clase nos hace leer sin ningún sentido (nadie entiende un carajo) Está de lujo y da mucha idea de como hacer las cosas. Muchas gracias por liberar este código ya que nos aclara muchísimo el panorama a aquellos que no tenemos bases teóricas tan sólidas en cuanto al análisis léxico.
    Un saludo desde Sinaloa.

  40. Gracias Guillermo, creo que la mejor recompensa que puedo tener es que el código sea de utilidad al menos para que se hagan una idea para el desarrollo de un analizador léxico pese a las grandes debilidades que tiene el código y la muy cara forma de emplear la memoria de la computadora.

    Pero bueno.. mejorarlo dependerá de ustedes.

  41. HOLA JAVIER:

    GRACIAS POR EL ANALIZADOR, EL MIO NO QUEDO TAMBIEN COMO EL TUYO, AHORA ESTOY HACIENDO UN EDITOR DE TEXTOS EN C++ TU TENDRAS ALGUNO??? DE SER ASI LO PODRIAS PUBLICAR???
    TE LO AGRADECERIA BASTANTE.

  42. Tu codigo es estupendo Valar, una consulta donde podría colocarle los mensajes de error cuando un token esta mal escrito por ejemplo el identificador ab$%l o el número 123$3, ambos mal escritos pero el analizador no los detecta

  43. Grandioso codigo, me es muy util para mi asignatura de compiladores, pero en mi caso en para entender etiquetas de HTML. Por mas que miro las tablas no llego a entender bien los saltos que da, ¿alguien podria indicarme algun manual o alguna referencia donde pueda consultarlo?

    Muchas gracias

  44. Mano, que buen dato tenés, tenemos (toda la clase) que presentar uno, pero ni el Ingeniero lo puede hacer. Asi de jodidos estamos! Gracias!

  45. ME GUSTARIA QUE LO PUSIERAS EN VISUAL BASIC PARA ENTENDERLO MEJOR Y GRACIAS DE TODOS MODOS.

  46. ta muy bueno tu proyecto pero te queria preguntar comno puedo crear un analisador lexico de pascal 1

  47. quisiera saber como hacerlo para que el programa me compare simbolos, letras mayusculas y minusculas, y cuando le sea introducido un caracter invalido se detenga el programa

  48. Amigo estuve 5 horas buscando ese analizador me funciono de maravilla en Lenguaje C lo hice por probar como esa solo para C#. muchas gracias

  49. HOLA valar!!!
    Buen Proyecto esta muy interesante,

    Solo que me gustaria que me enviaras los pasos para utilizar el ejecutable analex…

    Como que datos ingresar y como va funcionando paso a paso…

    GRACIAS…..

  50. Que buen proyecto tienes. felicitaciones Valar sigue adelante, te felicito, eres un gran ejemplo a seguir para nosotros los que vamos atras para seguir aprendiendo mas y mas,

    Felicitaciones…

  51. hola podrias ayudarme con un trabajo de la universidad tengo 15 dias para entregar un programa en c++ a cerca del analisis lexico y sintactico del ciclo for. Respondeme tu informacion sera de mucha ayuda please.

  52. hola valar esta muy padre tu trabajo pero podrias desirme exactamente en que compilaste todo tu trabajo que version de c++ utilizaste. muchas gracias esperotu respuesta.

  53. necesito un anlizador lexico que escanee un txt y muestre si un parrafo escrito hay palabra reservadas plis si lo tienes mandamelo

  54. hola javier…
    me dajron de tarea realizar un analizador lexico para el lenguaje c, creo ke puedo basarme en el tuyo para acerlo.. pero el problema es que al momento de poner el nombre del archivo me dice ke no lo encuentra,, no se si tengo que poner la ruta completa o solo el nombre o colocar todos los archivos en el mismo directorio, por ke de cualquir forma me dice que no lo encuentra.. agradeceria mucho que me ayudaras. gracias

  55. Hola

    muy interesante tu trabajo
    sólo queria preguntarte si existe la manera de usar tu código en un lenguaje distinto por ejemplo el visual basic, pero sin tener que volver a implementarlo, “llamar al codigo desde otro lenguaje”

    good work!!!

  56. hola como estas la verdad es que es mu interesante lo que hiciste
    estuve analizando el codigo porque = tengo que entregar un analizador para la materia de programacion y realmente me ayuda tu codigo
    oie al intentar correr el archivo .exe pongo el nombre del archivo pero no lo habre como lo debo de poner, la ruta completa c:\users…etc o solo el archivo y su extencion porfavor si m puedes resolver mi duda o alguien que me pueda ayudar muchas gracias por su atencion

  57. hola, oyes mira no le entendia mucho pero ya le voy entendiendo, ojala y me puedas ayudar lo ke pasa es ke me pidieron un analisador lexico pero en ANTLR, no se komo iniciar pk es un nuevo programa y pues no se komo, si me pudieras ayudar seria de mucha ayuda gracias ahhh y ke inteligente eres jejeej graxie

  58. hola, he entendido mucho el funcionamiento del analizador lexico al ver tu codigo, estoy haciendo uno para pascal. ¿como te fue con el analizador sintactico? ¿lo publicastes?. Te lo pregunto no para copiarlo sino para tenerlo como referencia al igual que otros libros

  59. hola,Valar puedes enviarme el codigo fuente del analizador lexico por favor pues no puedo accesar a los links que pusiste, te lo agradeceria mucho. mi correo es bahena_08@hotmail.com
    Espero que me puedas ayudar. hasta pronto.

  60. sos un maestro, pero todos tienen problemas para bajar el codigo fuente del link, podes dar una solucion, yo se que sii chee sos grande

  61. la verdad esta muy bueno tu trabajo ! te felicito no a todos se nos da lo de la programacion ! me estoy guiando de tu trbajo para poder terminar un compilador ya que me proyecto final en la clase de programacion de sistemas es crear un compilador que analize el lexico , la semantica y lo sintactico . y tu programa mas o menos me da la idea de como terminarlo te lo agradesco ! suerte y sigue con eso que se te da bien :D pocos tienen el don de programar :D

  62. Hola vaLar, dejame felicitarte por tu excelente trabajo, sobre todo por la intencion de que Tu esfuerzo sirva de ayuda para otras personas. Tu actitud me gusta, en lo personal yo tambien soy de los que comparten los trabajos. Adelante y que sigas teniendo exito en toda empresa que inicies!

  63. hola, buen trabajo, estoy tratando de portarlo a Visual Basic pero, podrias explicar la funcion que realiza cada variables o detallar las variables iniciales que declaraste, el texto que carga se almacena en un array ?? o busca carater por caracter, gracias por la respuesta

  64. Oye vaLar… muchas gracias por poner a disposición codigos como esos… me a servido de mucho como base para mi proyecto final de compiladores, exitos…

  65. Saludos desde Perú, yo estoy que realizo el mismo trabajo de A. Lexicografico, tú trabajo esta de lo mejor pero si me pudieras explicar como estas aplicnado la matriz de transición pues ando como medio perdido :S, te lo agradeceria infinitamente

  66. Hola tengo una duda, mira ya hice mi analizador lexico, pero cuandop se va a mandar el token al analizador sintactico, que es lo que se manda el token o su lexema ????

    Creo q es el token, pero es q ando un poco confundida, y tambien me gustaria saber tu idea de unir el analizador lexico con el sintactico.

    Porfavor

  67. hola, ya leei el codigo y si es algo entendible, el problema es qq al correo el exe te pide q ingreses el nombre del archivo q contiene el codigo en c# a analizar, pero se debe de poner la ruta completa del archivo?? solo el nombre?? o como?? ya probe con los 2 poniendo directorio completo del archivo .cpp y el nombre pero siempre marca q no encontro el archivo, espero y puedas explicarlo porque no pones nada sobre como abrir el archivo q se quiere analizar, saludos y gracias

  68. ya lo solucione, el archivo del codigo a analizar debe de estar en .txt solo es poner el nombre por ejemplo: codigo.txt y el archivo debe de estar en la misma carpeta de donde esta el archivo exe y ya te genera el archivo tokken, gracias me sera muy util, hasta luego.

  69. Hola amigo, que buen programa te aventaste he, la verdad, lo reconosco, aunque no soy bueno para el C, pero le entendi, y ya tome una idea de como hacerlo para el Lenguaje Java, solo espero que me de el tiempo.
    Hechale ganas, espero que estas palabras sean motivantes para ti, la verdad tienes un buen futuro en esto de la programacion.

    Pd: Tomare tu ejemplo para hacerlo en Java.

    Si todo sale bien, tratare de enviarlo lo mas pronto que pueda, o si no publicarlo.

    Suerte…

    Jsmaster®

  70. Hola amigo, disculpa pero los links no tienen los permisos suficeintes para se dercargados

    dale un chmod +x porfa…

    Gracias

  71. agradecere mucho su ayuda para poder costrur un lenguaje y el mismo que realice aperaciones con binarios. gracias compañeros

  72. por favor si me pudieran ayudar con cualquiera de los analizadores les quedo agradecido mucha gracias……

  73. si es cierto no puedo ver los codigos! no tienen los permisos.. y si me urge ver como lo construiste

  74. hola como estas quisiera saber si una vez terminado tu proyecto lo podremos adquirir facilmente pues nosotros tenemos muchas ideas en educacion inclusiva las cuales consideramos seran de mucha importancia para nuestro proyecto por favor comunicate con nosotros a trvaes de mi correo para comentarte bien cual es la idea estos son nuestros telefonos 3006265014 y 7919716 colombia gracias……

  75. Excelente analizador amigo, gracias a este logre hacer el mio, que software utilizaste para crear el automata finito determinista??, gracias.

  76. Que software utilizaste para dibujar el diagrama del automata finito determinista???, y otra pregunta, como haces para manejar los errores

  77. qe pasa cuando introduces un caracter no valido? por ejemplo a+1@b=0?? creo qe te falto corregir eso nada mas… pero tu trabajo es muy bueno…graxx por compartirlo

  78. hola, vaLar, espero que entendas portugues: quando se faz uma comparação em C# utiliza-se ==, no entanto seu codigo analisa os dois sinais separadamente, assim:
    Identico, =
    Asigna, =
    Não seria mais certo que a resposta fosse apenas o
    Identico, =
    ?

  79. hola yo tengo que realizar un analizador y la verdad no se nada de esto pero e tomado tu proyecto como ferencia…se ve que es algo costoso pero tratare de entener cada uno de los pasos …Felicidades y gracias por publicarlo…asi ayudas a los que se nos dificultan un poco este tipo de actividades..
    saluditos…

  80. Muy buen trabajo, te felicito, el codigo es muy bueno y esta bastante limpio en cuanto a la comprension, soy maestro y doy la materia de compiladores y me sirvio de mucho para que mis alumnos vean a manera de ejemplo el codigo que hiciste y puedan desarrollar otros para otro lenguaje, saludos y gracias

  81. @Sidney Rene: Gracias, que bueno que le fue útil aunque difieron un poco sobre la calidad del código, ya que revisándolo y a 5 años de su creación, creo que pudo haber sido mejor.

    Por otro lado, realmente me encantaría que las personas que han tomado el código como ejemplo, nos compartieran su creación y así enriquecer este proyecto que al final, puede ser útil para otros tantos.

  82. muy buenas a todos.. ps yo soy nuevo en esto y me dejaron un proyecto de una agenda electronica y tengo que reconocer la informacion desde un archivo de texto pero no tengo ni idea de como hacerlo talvez aya alguien que me pueda ayudar se lo agradeceria muchisimo… ahh y otra cosa…talvez me pueden decir como utilizar este analizador ,, que tengo que hacer para probarlo..gracias..

  83. EXCELENTE, AHORITA YO ESTOY HACIENDO UN COMPILADOR COMPLETO PARA WEB, YA QUE EXISTE UNA APLICACION LLAMADA GOLD PARSER PERO NO ESTAN TOTALMENTE DOCUMENTADAS LAS OPCIONES EN JAVA Y PYTHON, ASI QUE TENDRE QUE CREAR UNO PROPIO, IGUAL DE LA MISMA MANERA PARA MI MATERIA DE AUTOMATAS CREE UN ANALIZADOR LEXICO, PERO YA NO LO ENCONTRE Y NO RECORDABA COMO ERA. GRACIAS.

  84. oye esta interesante tu trabajo, FELICIDADES, sabes tengo un proyecto que realizar y es similar al tuyo pero no se como empezar, tengo que implementar un Scanner que reconozca algunos comandos designados, nos han dicho que podemos utilizar un metacompilador como Lex, pero no se como empezar, si supieras de algun link donde haya informacion sobre como utilizar Lex te lo agradeceria, llevo el curso de COMPILADORES… Gracias revisaré tu compilador es un gran aporte. Gracias

  85. Compañero me gustaria saber si me puedes colaborar con un analizador sintactico, ya que este programa me parecio excelente y de muy buena ayuda.

  86. hola, te agradesco tu filosofia de comparti, ya ke hay personas ke no comparten informacion… me fue muy util tu trabajo y agrege tu referencia puesto ke es tu trabajo.

    nuevamente gracias y espero te vaya bien siempre.

  87. Hola gracias por tus aportaciones tengo una duda sobre como se hacen las transiciones del automata donde puedo encontrar mas información???

  88. Saludos. Buen trabajo. Pero viendo el codigo me llamaron la atencion un par de cosas:

    1) ¿Por que no tienes un main mas limpio? Es decir porque no subdividiste todo ese codigo en funciones mas pequeñas, aumenta la legibilidad y hace el trabajo mas sencillo a la hora de depurar.

    2) ¿Por que no usaste unos FOR para llenar las listas de estados repetidos? Se veria mucho mas compacto y te hubieras ahorado una buena cantidad de tipeo repetitivo.

    En vez de:
    MT[44][1]= 46;
    .
    .
    .
    MT[44][30]= 46;

    algo como:

    for(i=1;i<=30;i++){MT[44][i]= 46;}

    y puesto que muchos saltaban en el "J" de 3 en 3 podrias haberlos agrupado dentro de otro for con j+3 como incremento. Asi solo tendrias que haber tipeado a pie los casos especiales como los que aparecen al principio.

    Saludos.

  89. hola de Nuevo.

    No me aguante la curiosidad y queria ver que tanto me ahoraba haciendo los FOR… efectivamente un monton.
    En promedio escribi 3 lineas por cada 30.

    Aqui te pego el codigo para que veas lo que quise decir:
    for(i=1;i<=30;i++){MT[2][i]=4;}
    MT[2][1]= 5;
    MT[2][7]= 3;

    for(i=1;i<=30;i++){MT[6][i]=8;}
    MT[6][2]= 9;
    MT[6][7]=11;

    for(i=1;i<=30;i++){MT[10][i]=12;}
    MT[10][4]= 13;
    MT[10][7]= 11;

    for(i=1;i<=30;i++){MT[14][i]=15;}
    MT[14][3]= 19;
    MT[14][4]= 17;
    MT[14][7]= 16;

    for(i=1;i<=28;i++){MT[17][i]=17;}
    MT[17][29]=18;
    MT[17][30]=18;

    for(i=1;i<=30;i++){MT[19][i]=19;}
    MT[19][3]= 20;

    for(i=1;i<=30;i++){MT[20][i]=19;}
    MT[20][4]= 21;

    for(i=1;i<=30;i++){MT[23][i]=25;}
    MT[23][7]= 24;

    for(i=1;i<=30;i++){MT[26][i]=28;}
    MT[26][7]= 27;

    for(i=1;i<=30;i++){MT[29][i]=31;}
    MT[29][7]= 30;

    for(i=1;i<=30;i++){MT[32][i]=34;}
    MT[32][7]= 33;
    MT[32][10]=35;

    for(i=1;i<=30;i++){MT[35][i]=36;}
    MT[35][7]= 37;

    for(i=1;i<=30;i++){MT[38][i]=40;}
    MT[38][7]= 39;
    MT[38][11]=41;

    for(i=1;i<=30;i++){MT[41][i]=42;}
    MT[41][7]= 43;

    for(i=1;i<=30;i++){MT[44][i]=46;}
    MT[44][7]= 45;

    for(i=1;i<=30;i++){MT[47][i]=49;}
    MT[47][13]=48;

    for(i=1;i<=30;i++){MT[51][i]=53;}
    MT[51][14]=52;

    for(i=1;i<=30;i++){MT[67][i]=67;}
    MT[67][21]=68;

    for(i=1;i<=30;i++){MT[76][i]=77;}
    MT[76][25]=76;

    for(i=1;i<=30;i++){MT[78][i]=79;}
    MT[78][6]= 78;
    MT[78][26]=78;

    for(i=1;i<=30;i++){MT[82][i]=83;}

    for(i=1;i<=30;i++){MT[84][i]=85;}
    MT[84][5]= 86;
    MT[84][6]= 84;
    MT[84][28]=84;

    for(i=1;i<=30;i++){MT[87][i]=91;}
    MT[87][5]= 88;
    MT[87][28]=87;

    for(i=1;i<=30;i++){MT[88][i]=90;}
    MT[88][28]=89;

    for(i=1;i<=30;i++){MT[89][i]=90;}
    MT[89][28]=89;

    for(i=1;i<=30;i++){MT[92][i]=93;}
    MT[92][25]=92;
    MT[92][29]=92;

    Se puede mejorar aun mas. Con unos IF y reescribiendo la parte de los "repetivos" que pusiste al final se generaria un patron al incorporarlos dentro de un solo sistema. Solo tendrias que poner la lista de "diferentes" al final.

  90. Renzo:

    Saludos y gracias por tus comentarios, seguramente les serán de utilidad a los demás.

    Respecto a las dos preguntas que me haces, te reponderé :D

    1) ¿Por que no tienes un main mas limpio? Es decir porque no subdividiste todo ese codigo en funciones mas pequeñas, aumenta la legibilidad y hace el trabajo mas sencillo a la hora de depurar.

    En efecto, el uso de funciones o mejor aún, de clases hubiera hecho del código algo verdaderamente límpio y portable pero en aquellos años universitarios, apenas si sabía programación estructurada y como te darás cuenta, no muy bien… pero eso fue hace uuuf, años.

    2) ¿Por que no usaste unos FOR para llenar las listas de estados repetidos? Se veria mucho mas compacto y te hubieras ahorado una buena cantidad de tipeo repetitivo.

    Esa parte si la consideré, pero por cuestiones de la materia, el profesor insistía en ver todos los pasos de transición del autómata, por lo que tuve que asignar el valor para cada elemento de la matriz de transición MT[][] = n;

    De nuevo, gracias por tu aporte y si tienes una mejora que desees anexar a esta publicación para que otros puedan aprovecharla, no dudes en mandárme el link o bien, los archivos necesarios en un .zip

    Saludos cordiales!

  91. este proyecto esta muy interesante,me sirvio de mucho para mi materia de compiladores,gracias por compartirlo con nosotros,a mas de uno nos has salvado la vida,lo mas importante de sto es q hay q contribuir con mas programas por esas ocasiones en las q se necesitan o no? saludos y cuidate

  92. hola, muchas gracias por el aporte, me acabas de abrir la cabeza y me has dado una idea de por donde tiene que ir mi proyecto

  93. Que onda!! queria ver tu trabajo, pero no responde el servidor :S. a mi me ha tocado hacer para Java y Pascal. lex es lo maximo… nose pero el visual studio 2010 trae el F# que creo q funciona casi igual al lex.

  94. Hola queria ver el automata, pero parece q no funciona los links del servidor, por ser un proyecto muuuyy viejo, no se si por pura casualidad aun tienes ese proyecto, y me lo podrias enviar a mi correo, gracias…

  95. He pasado tu código a php, pero encontre una inconsistencia, en la salida que muestra tu ejemplo en la cuarta línea se muestra “Libreria, stdio.h”, pero en el código no se consideta la forma de identificar una Libreria, ni siquierea se encuentra la palabra “Libreria” en el código, seguro que el codigo que esta publicado es el mismo que utilizaste para ejecutar el ejemplo?

  96. Hola!!!

    m podrias hacer un gran favor, si m mandaras tus archivos, ya q las extenciones k tienes no m mandan a ningun lugar solo dice q internet explorer error, yaa lo intente varias veces antes d mandart est correo y con diferents computadoras y en diferents sitios…

    Por lo q los comentarios k hay se ve k esta genial.

    de antemano gracias

    saludos..(mi correo pukkita178@hotmail.com)

  97. hola buentas javier,tengo una duda en el analizador lexico, para que sirve este

    void corrige_arreglo(char arre[100]){

    hasta

    }//fin de la funcion llenar_matriz()

    sera que me puedas ayudar a explicarmelo porfa, seria de una gran ayuda javier.

    gracias,espero tu respuesta. que tengas buen dia!!!

  98. hola necesito saber como se hace un analizador lexico en rubi necesito de su ayuda si alguien sabe por favor ayudenme

  99. ola el profe flore kiere un ana lex. ya lo hice pero m reprobo que le digo para que me pase???si tienen alguna idea porfavor marquenm 9511685645

  100. funciono muy bn para el lexico grafico
    y ahora resulta que piden el sintactico, p/ el lunes.
    solo me interesa para el for, de los demas casos yo me encargaria.
    como siempre se agradeceria el aporte.

  101. disculpen yo he estado tratando de descargar el ejemplo pero no puedo sera que alguien me lo podria mandar a mi correo?
    mi correo es nicemanyd@hotmail.com
    o si esta en algun otro lugar para descargar talvez me podrian dar el link
    de antemano muchas gracias.

  102. disculpen alguien me podria enviar el codigo fuente en c# es que no lo puedo descargar ya lo he intentado pero no funciona el servidor

    mi correo es nicemanyd@hotmail.com
    De antemano muchas gracias.

  103. Hola vaLar, disculpa los links del código fuente del analizador hecho en C no funcionan, donde puedo buscar tu documentacion? Tengo un proyecto parecido y necesito tu ayuda por favor.
    De antemano Gracias

  104. hola..tengo que hacer un analizador lexico para las palabras reservadas de c y traducilas al español….he querido ver tu trabajo pero el enlace no funciona..hay alguna otra manera de mirarlo? gracias

  105. hola de nuevo yo…he intentado muchas veces ver el codigo de tu analizador pero el enlace NO FUNCIONA serias tan amable de enviarmelo a mi correo: didyrimu@yahoo.com
    gracias….

  106. Hola, en mi materia de Programacion de Sistemas estan por encargarme hacer esto un Analizador Lexico, y pues quiero adelantarme y empesar a hacer algo, me gustaria mucho poder ver analizador, para tomarlo como referencia y poder crear el mio.
    Pero los Links no funcionan, o el servidor no lo se, espero que puedas arreglarlos. Tambien use los links que les diste a otros cambiando el nombre por la ip, pero tampoco me funcionaron.
    Bueno muchisimas gracias por tu tiempo.
    En dado caso que pudieses arreglarlos y sacas un tiempesito me lo podrias enviar a mi correo? es soycloud@gmail.com
    Bueno Muchas gracias de ante mano.
    Saludos

  107. Hola ….. vaLar oye pos el post esta bien interesante pero no se puede ver los archivos que subiste podrias cambiar de servidor o repostear ….. me interesa ver tu codigo por que son mis inicios en esto de la programacion. Y si algo puedo aprender viendo tu codigo seria bueno no crees…!!!!!

  108. oal men bueno el codigo ps pero la verdad tengo un problema nose si lo podrias postear o con codigos en netbeans ,, es par aun trbaajo de compiladores.. de mi facultad porfas kisiera la idea de tu codigo para modificarlo o guiarme .. toy muy apretado en tiempo por motivos de parciales y se cruza la situacion porfas te lo agradecere eternamente.. gracas de toos modos.. espero tu apoyo y sigue adelante ..

  109. Yo lo baje hace años este proyecto y aun lo tengo, si alguien lo quiere me puede escribir y se los reenvio, y es cierto los archivos ya no estan disponible… saludos

    Mi correo ctezohotmail.com

  110. hola Carlos, Hola JonZen ya agrege a ambos en mi msger para que me pasen el proyecto por favor, practicamente lo necesito urgente y les agradeceria que me hicieran el favor de pasarmelo.

    Espero y sean amables

    mi correo es: llafra_91@hotmail.com

    Gracias CHICOS
    =)

  111. muy interesante el artículo, aunque sigo sin entender muy bien.
    alguien tiene el archivo AFD.jpg? o el código fuente.
    muchas gracias

  112. No le entiendo muy bien a lo del analizador lexico y necesito ver un ejemplo, si alguien tiene la aplicacion o un documento q me explique como una decicion if es interpretada por el analizador lexico gracias

  113. Hola Amigos, creo que no se pueden abrir los links, me lo podrían mandar a mi correo, es que lo necesito, quiero saber como empezar hacer un compilador gracias Amigos.

    mi correo es. ss.ahh@hotmail.com

  114. Hola: Amigo, yo tambien estoy haciendo mi tarea de compiladores y no le entiendo nada, ya intente abrir tus links por varios días y no estan disponibles, puedes verificarlos por favor, muchas gracias, no quiero que me hagas mi tarea pero me encantaría que mandaras tu aporte por correo electronico o rapidshare o algo así…. Felicitaciones de verdad y gracias por compartir, un besooote..

  115. Bueno eso me sirvio para ubicarme ya que tengo que realizar un compilador en java y no tenia ni idea como empezar.

  116. Bueno estaba interesado en aprender de este proyecto, ya que estoy haciendo algo parecido, pero los link estan malos :/, podrias repararlos porfavor? cloows.tkd@gmail.com, dejo mi correo por si acaso.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s