Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-02-2012
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
Smile 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
Código Delphi [-]
public
    { Public declarations }
const preservadas : array[1..4] of string =('inicio','fin','declaro','entero');

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.
Responder Con Cita
  #2  
Antiguo 26-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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 18:52:44.
Responder Con Cita
  #3  
Antiguo 26-02-2012
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
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
Responder Con Cita
  #4  
Antiguo 26-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 26-02-2012
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
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.
Responder Con Cita
  #6  
Antiguo 26-02-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Un trabajo muy complejo este.
Responder Con Cita
  #7  
Antiguo 26-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
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,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 26-02-2012 a las 19:30:45.
Responder Con Cita
  #8  
Antiguo 27-02-2012
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
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..
Responder Con Cita
  #9  
Antiguo 28-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por donpedro Ver Mensaje
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..
Tal vez te suena demasiado bruto mi comentario pero si es como dices que están en blanco entonces el problema no es nuestro sino de que tu como estudiante y tu profesor/a se pongan a sentar y hablar al respecto.
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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 29-02-2012
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
muchas gracias

delphius, gracias por tu amplio comentario, estare haciendo uso de tu consejo, luego les hare saber como me fue...

gracias a todos..
Responder Con Cita
  #11  
Antiguo 29-02-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
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
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #12  
Antiguo 07-03-2012
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
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 = ""
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 07-03-2012 a las 20:28:37.
Responder Con Cita
  #13  
Antiguo 25-03-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Ñuño Martínez Ver Mensaje
Hace poco leí el último libro sobre compiladores de Niklaus Wirth, y no lo vi nada complicado.
Que suerte la tuya. Yo en mi momento sufrí con esa cátedra; aunque debo decir que a pesar de no resultarme fácil le saqué cierto gusto.

Cita:
Empezado por Ñuño Martínez Ver Mensaje
Eso sí, no lo encontré en español, mucho menos en castellano, así que si no te manejas bien en inglés...
Entonces definitivamente el bestia soy yo, porque yo que tenía acceso a biblioteca con libros en español y no hubo caso... era leerme chino

Cita:
Empezado por Ñuño Martínez Ver Mensaje
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 = ""
No creo que les hubiera pedido que llegaran al extremo de LL(1) pero si yo fuera el profesor y un estudiante me viene con un código como ese lo repruebo porque eso no cumple nada en lo que se esperaría de la cátedra. ¡Pobrecitos, muy pobrecitos el que me tuviera de profesor! Y lo peor es que parece que voy a terminar aceptado entrar en la docencia
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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #14  
Antiguo 25-03-2012
donpedro donpedro is offline
Miembro
 
Registrado: nov 2009
Posts: 102
Poder: 0
donpedro cantidad desconocida en este momento
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
Responder Con Cita
  #15  
Antiguo 25-03-2012
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por donpedro Ver Mensaje
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
¿Viste? ¡Ya lo decía yo, muuuuuy raro que no se diga, ni siquiera al voleo, algo sobre Lex y Yacc!

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,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #16  
Antiguo 26-03-2012
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
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
Responder Con Cita
  #17  
Antiguo 26-03-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
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.
Responder Con Cita
  #18  
Antiguo 26-03-2012
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Cita:
Empezado por Al González
Resulta grato volver a verte, al menos virtualmente.
Gracias Al, también es grato leerte.

Siempre paso por aquí, aunque no escribo, pero siempre me doy tiempo de leer las aportaciones de los foristas de clubdelphi.

Saludos
Responder Con Cita
  #19  
Antiguo 19-02-2013
genyus00 genyus00 is offline
Miembro
 
Registrado: jun 2010
Posts: 29
Poder: 0
genyus00 Va por buen camino
Talking

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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Analizador de hardwares para Ubuntu enecumene Linux 7 29-08-2008 14:59:26
analizador de espectro gaston260 API de Windows 0 02-02-2008 16:37:42
Analizador de Codigo Fuente Fita Varios 2 01-06-2007 11:07:23
analizador de dependencias entre packages Walter Roccaro Varios 1 07-04-2006 15:20:12
Loop desde el Analizador de Consultas Jvilomar MS SQL Server 6 03-10-2005 14:41:21


La franja horaria es GMT +2. Ahora son las 16:16:42.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi