FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
analizador lexico
hola a todos, estoy realizando un proyecto universitario llamado analizador lexico, lo estoy elaborando en delphi. bueno aqui va mi explicacion: tengo un formulario con un richedit donde voy a escribir mi propio programa, por ejemplo:
inicio declaro a,b,r:entero; a=1 b=2 r=a+b fin; donde inicio, declaro, entero y fin son palabras reservadas del propio lenguaje. dichas palabras las tengo dentro de un array estatico
mi duda es, como puedo recorrer el richedit y comparar las palabras reservadas del arreglo y si existe convertirla a mayuscula colocandola de color azul. osea como lo hace mysql que las palabras o comandos del manejador por ejemplo create al darle a la barra espaciadora la coloca en mayuscula y azul..............espero que me hallan podido entender..........espero su ayuda......muchas gracias. |
#2
|
||||
|
||||
Hola
Aqui tienes un ejemplo. En el edit colocas una palabra y al presionar el boton la busca y la coloca en rojo. Saludos
__________________
Siempre Novato Última edición por Caral fecha: 03-02-2015 a las 19:52:44. |
#3
|
|||
|
|||
Hola caral
excelente ejemplo, muchas gracias. pero me gustaria preguntarte algo como podria hacer que al escribir una palabra y presionar la barra espaciadora me comparara si lo que escribi es una palabra reservada, osea que el programa me vaya comparando mientras voy escribiendo por ejemplo como el mismo lenguaje de delphi que al escribir var el lo coloca en azul. porque lo que trato de hacer es un compilador donde tambien tengo que almacenar en una tabla de simbolos todo. en este caso serian dos preguntas:
primera: como haria para que el programa me analize mientras voy escribiendo. segundo: como hago para guardar dentro de otro array todas las palabras del richedit. por ejemplo: si en el richedit escribo " hola como estas " el me tiene que guardar en un array las tres palabras indice0=hola indice1=como indice2=estas no se si me explique bien.......gracias |
#4
|
||||
|
||||
Hola
Te explicaste bien, pero no lo se, tendría que practicarlo para ver que me sale, el que esta el la Universidad eres tu, yo soy un novato con ganas de aprender. Si ves el ejemplo podrías: 1- Crear un procedimiento que contenga lo que esta en el procedimiento onclick del boton. 2- llamar a ese procedimiento en el evento onchange del edit. 3- si vas a crear un array me imagino que empezaras a tener problemas con la cantidad de datos ya que no serán siempre los mismos. Me parece que serviría mejor crear un INI para almacenar los datos y posteriormente recuperarlos. No se, se me ocurre esto. Saludos
__________________
Siempre Novato |
#5
|
|||
|
|||
aqui otra vez
Gracias Caral, me ha servido de mucho tu ultimo comentario, voy a crear un archivo .ini o .txt donde me guarde todas las palabras. cuando lo tenga resuelto lo compartire.........muchas gracias.
|
#6
|
||||
|
||||
Un trabajo muy complejo este.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#7
|
||||
|
||||
Si en verdad pretendes hacer un compilador entonces lo mejor es emplear algo diseñado para eso, como Lex y Yacc, que son para hacer exactamente el analizador léxico y sintáctico.
Doy por supuesto que además, estás cursando la cátedra de compiladores... y que además ya estuviste haciendo al menos en papel parte de la gramática y algunas expresiones reguales y autómatas infinitos como de práctica para luego volcar lo aprendido en Lex o Yacc (ya no recuerdo cual era cual ) Si se trata justamente de poner en práctica la teoría de compiladores, y que te hayan pedido un analizador léxico para una gramática (sea de un lenguaje hipotético o real) me cuesta creer que la forma en como lo estás encarando sea válida ¿Porqué no nos comentas para que cátedra es el trabajo? Si es como sospecho, de compiladores, ¿Hasta que temas han llegado a ver? ¿No les han mostrado siquiera para que son Lex y Yacc? Me sería extraño que le pidan que codifiquen un analizador... y sobre todo con tantas licencias para volcar en la práctica como tu en la forma tan "casera" que lo estás llevando. Si te explicas y nos comentas más al respecto podríamos ver para donde van los tiros. Saludos, Última edición por Delphius fecha: 26-02-2012 a las 20:30:45. |
#8
|
|||
|
|||
delphius
hola delphius, realmente les voy a ser sincero, estoy cursando el penultimo cuatrimestre de la carrera ing. en sistemas y/o computacion donde me estan dando compiladores y programacion de sistemas, realmente la maestra de compiladores no se da a entender o no sabe lo que esta dando, porque me supongo que para dar compiladores debe ser una persona que sepa programar para poder impartir esa materia y es algo que ella no sabe. ella nos ha dado lo que mencionaste y nos ha hablado del arbol sintactico pero nos ha dejado vacio totalmente. ella quiere que le hagamos un analizador lexico, sintactico y semantico. ahora el profesor de programacion de sistema nos enseño un analizador lexico que le hicieron unos estudiantes no en base a un lenguaje sino que el te identifica lo que tu escribes y te lo almacena en una tabla de simbolos por ejemplo:
si en un memo o richedit yo escribo: hola como estas a+b*c el programa lo que hace es que almacena cada palabra e identifica los simbolos los almacena y le coloca descripcion osea el coloca dentro de un stringgrid: lo que se muestra en la imagen es lo que debe hacer el analizador. pero yo lo quiero hacer con mis propias palabras reservadas, utilizando la siguiente estructura: inicio declaro a,b,r:entero a=1 b=2 r=a+b fin; y que cuando le de analizar me muestre si el codigo tiene un error y si no tiene error que me guarde cada palabra y cada simbolo en una tabla con su descripcion.....no se si me explique,,,,,,,, nunca he usado lex yacc si me puedes recomendar algun tutorial o algo donde pueda crear un analizador me seria de gran ayuda........muchas gracias delphius.. |
#9
|
||||
|
||||
Cita:
No puedes pretender, con todo respeto, que te orientemos en algo que tu profesor/a debe cumplir. Al no tener nociones de los objetivos y del alcance real del trabajo con más razón. Aquí se te puede ir asistiendo, pero teniendo algo más palpable, más concreto y en donde se nos sea posible orientar. Pero en cuento lo que se evidencia aquí es algo por una falta de conceptos formales (ya sea la culpa del profesor o del estudiante) sin una vista clara, y bien enmarcada en un aspecto muy puntual y ni que decir.... formal; porque es un trabajo a presentar en una cátedra que no es fácil de entender ni a la primera ni segunda pasada. Debes tener más que presente cuales son las consignas y objetivos reales que persigue tu profesor/a. Si dices que no se les ha comentado siquiera de Lex y Yacc entonces a mi ver no hay argumentos que sustenten la puesta en práctica de los conceptos dejándolos a ustedes en un mar de cosas muy abstractas y donde cada quien se las ingenie como venga. Y no creo que ese sea el resultado que quiere tu profesora. Mi consejo: ¡HABLA CON TU PROFESOR/A! Luego ven a aquí a por las dudas puntuales, bien concretas. Por el bien de tu trabajo, de tu regularidad, y de tu carrera... ¡HABLA! Ya estás finalizando, con más razón debes soltar el miedo a no decir: "Profe, no entiendo. ¿Puede explicarse de nuevo?" Ha... mi otro consejo: agarra el "libro del Dragón", Introducción y diseño de compiladores (o algo así era el nombre... no recuerdo bien) de Aho y otros. Yo mucho no te puedo ayudar, reconozco que al tema de compiladores lo tengo muy descuidado; ya practicamente no recuerdo nada de la teoría. No tengo a mano mis apuntes, ni el libro. Cuando yo cursé dicha cátedra empleamos una versión de Lex y Yacc que en vez de generar archivos en formato C, era para Pascal. En términos generales en Lex se cargaban las expresiones, luego éste generaba un archivo que se pasaba a Yacc y por último uno ya con esto podía probar expresiones como las que comentas y te indicaba si se ha detectado un identificador, etc. Quizá tu profesor/a tenga otra forma de llevar a la práctica lo enseñado, no lo se con total seguridad; pero es de esperarse que lo que se busca es que ustedes apliquen lo aprendido, elaborando de alguna forma, las expresiones reguales, el árbol sintáctico, etc. Diseñar un compilador no es poca cosa, (como acotación: el trabajo práctico que hice con Lex y Yacc era para dos semanas) y con todo total respeto te digo, que la forma en como tu lo pretendes hacer, me suena muy fuera de lugar... En teoría los compiladores no tienen un array con las palabras reservadas; no se ve en ese simple ejemplo que has dado algún uso de una gramática expresada ya sea como expresión regular o un autómata. Si en cambio se utilizan pilas, colas y otras estructuras de datos para auxiliarse y dar forma a sus operaciones.... Pero repito: las palabras reservadas no van así. Saludos, Saludos, |
#10
|
|||
|
|||
muchas gracias
delphius, gracias por tu amplio comentario, estare haciendo uso de tu consejo, luego les hare saber como me fue...
gracias a todos.. |
#11
|
||||
|
||||
Creeme, lo mejor para ti, y el resto de los estudiantes, lo mejor sería hablar con tu profesora para que les explique apropiadamente y les comente los lineamientos del trabajo.
Las dudas con las que has venido inicialmente son pura pinturita, algo estético y sólo es a lo que hace a un aspecto visual. Pero por dentro es lo que en verdad importa. ¿De que sirve que en pantalla te resalte con color, negrita y/o mayúscula las palabras reservadas si en realidad el sistema no cumple con lo pedido en clase? Por ello yo hice mucho incapié a que bajes más las cosas a tierra y nos comentes sobre los alcances del proyecto y nos muestre algo más palpable de lo que estás haciendo. Si tu no tienes una ideas claras, y sobre todo de lo que estuviste viendo en clases, será muy difícil que te asesoremos. Si quieres saber algo sobre Lex y Yacc, aquí hay material de consulta. Al final señala como referencia justamente el libro que yo apuntaba: Compiladores: Principios, Técnicas y herramientas de Alfred Aho y otros. (o et. all... para quienes prefieren este término) Por cierto, no necesariamente el profesor de compiladores debe saber de programación; aunque es recomendable. Mi profesora de Compiladores y Sistemas Expertos (era la misma en ambas cátedras) no maneja mucho de lenguajes pero eso no le impidió dar una de las cátedras más complejas, desafiantes y de contenidos tan interesantes, que vi en los 5 años de carrera. Me sería muy extraño que tu profesora no supiera nada de Lex y Yacc; son casi una referencia obligatoria en la cátedra, así como lo es el "libro del dragón". ¡Ánimo y ponle ganas! Como dato extra... ¡yo también sufrí en esa cátedra! Se te hace una ensalada rusa la cabeza... y mejor no me pongas a recordar... ¡LL(1) fue un tormento para mi! No le encontraba vuelta ni al derecho ni al revés ¡Y lo sigue siendo! No me preguntes como es que logré pasar el final; sólo se que me quemé las cejas por durante un mes leyendo libros, mis apuntes y practicando; y practicando... y más práctica para entenderle la mano. Ha... y una ayuda de un buen grupo de estudio en los que nos apoyábamos el uno al otro. Saludos, PD: El trabajo sobre Lex y Yacc para nosotros fue grupal |
#12
|
||||
|
||||
Hace poco leí el último libro sobre compiladores de Niklaus Wirth, y no lo vi nada complicado. Eso sí, no lo encontré en español, mucho menos en castellano, así que si no te manejas bien en inglés...
De todas formas, para cosas simples tampoco hay que liarse tanto con LL(1) y misticismos similares. Basta con algo así: Código:
REPITE Palabra := ExtraePalabra (Cadena) IF Palabra = "PALABRA1" THEN EjecutaPalabra1 (Cadena) ELSE IF Palabra = "PALABRA2" THEN EjecutaPalabra2 (Cadena) ... END IF HASTA Cadena = "" Última edición por Ñuño Martínez fecha: 07-03-2012 a las 21:28:37. |
#13
|
||||
|
||||
Cita:
Cita:
Cita:
Por algo el profe les habló de expresiones regulares, etc. El estudiante debería razonar y evaluar en cómo llevar a la práctica los conceptos. Lo que si es muy extraño que no les haya comentado alguito de Lex y Yacc; casi diría que es una obligación enseñarles eso. Además, no quisiera imaginarme semejante anidamiento de IF para reconocer tan sólo 10 palabras. No estaría demás que donpedro nos traiga novedades. Saludos, |
#14
|
|||
|
|||
Hola a todos, la semana pasada la profesora hablo de lex y yacc, estoy investigando es mas facil trabajar con lex y yacc estoy a punto de hacer el analizador luego les cuento..... gracias a todos, y a ti Delphius
|
#15
|
||||
|
||||
Cita:
Lex y Yacc te hacen todo el trabajo... Pero, para eso previamente debe haber estruje de cerebro para que tu hagas las cosas bien al pasarles las gramáticas correctas. Mi consejo: piensa en papel primero. Saludos, |
#16
|
||||
|
||||
Hola a todos
Solamente intervengo para poner el enlace a una herramienta auxiliar en la creación de un analizador de sintaxis. http://www.goldparser.org/ Aquí está su descripción http://en.wikipedia.org/wiki/GOLD_%28parser%29 Es una alternativa reciente para las herramientas del LEX y YACC Saludos |
#17
|
||||
|
||||
Off-topic
Ya se te extrañaba por aquí, Héctor.
Solamente intervengo para decirte eso. Resulta grato volver a verte, al menos virtualmente. Saludos. |
#18
|
||||
|
||||
Cita:
Siempre paso por aquí, aunque no escribo, pero siempre me doy tiempo de leer las aportaciones de los foristas de clubdelphi. Saludos |
#19
|
|||
|
|||
Hola, buenas, quizás un poco tarde, pero lo que debes hacer primero es crear el árbol gramático y si se te hace de ayuda en su tiempo yo me guié por la sintaxis en la ayuda del "Borland C", que muestra la sintaxis de cada sentencia, de allí es solo cambiar las palabras que usa el Borland por las propias, y si lo que quieres es saber que tipo de dato es el que has escrito pues fácil determina que caracteres serán tu fin de palabra, por ejemplo, después de cada "Space" , "Enter", o "simbolo" puedes analizar si la palabra recién escrita es o no una palabra reservada, o validando que una palabra este compuesta solo por letras [aA...zZ] al escribir un carácter diferente enviar a analiza la palabra. Eso lo puedes hacer en el KeyPress del RichEdit.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Analizador de hardwares para Ubuntu | enecumene | Linux | 7 | 29-08-2008 15:59:26 |
analizador de espectro | gaston260 | API de Windows | 0 | 02-02-2008 17:37:42 |
Analizador de Codigo Fuente | Fita | Varios | 2 | 01-06-2007 12:07:23 |
analizador de dependencias entre packages | Walter Roccaro | Varios | 1 | 07-04-2006 16:20:12 |
Loop desde el Analizador de Consultas | Jvilomar | MS SQL Server | 6 | 03-10-2005 15:41:21 |
|