Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 15-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
En principio, lo que necesitas en un analizador léxico y un analizador
sintáctico. Esto se da en la asignatura de Compiladores.


El léxico se encarga de encontrar los tokens, y se los pasa al sintáctico para
que vea el orden en el que se ha detectado, en base a eso, y según las
expresiones regulares que se hayan proporcionado al sintáctico, se bifurca en
una ejecución u otra.

No sé que tal andas en estos temas, pero existe el Lex y Yacc para delphi
hecho en delphi; es open Source:

Cita:
Empezado por TP
TP Lex and Yacc { The Compiler Writer's Tools for Turbo Pascal
Version 4.1 User Manual
Albert Graf
Department of Musicinformatics
Johannes Gutenberg-University Mainz

http://www.musikwissenschaft.uni-mainz.de/~ag/tply
For information about the Free Pascal Compiler, please refer to:
http://www.freepascal.org
De hecho, es lo que se usa para estos casos.

Vamos con el tema del Trash.
No sé si ya has trabajado con punteros anteriormente, así que te digo las
bases.

En realidad Trash es una variable de 32 bits que es un puntero al objeto.
¿Que significa eso?, que Trash guarda la dirección de memoria donde ese
objeto reside, en este ejemplo el 100


Código:
 Trash                                              Memoria Ram
 -------                          Dirección    -----------------------------
|  100 |				0     |                            |
 -------				100   |aqui está el objeto Trash   |
					200   | y puede que ocupe mucha ram|
					300   |Otro objeto Trash empieza aq|
					      |y ocupa el mismo espacio |
					       -----------------------------
De hecho, al porner
Código Delphi [-]
   var Trash :TTrash;
Simplemente se reservan 32 bits en la memoria ram ( lo que está en color
azul).
Cuando haces Trash := TTrash.Create;
es cuando se reserva el espacio en memoria ram y se crea el objeto (lo
puesto en rojo). y la variable trash, se le asigna la direccion de la ram donde
está ese objeto, en este caso 100.

Cuando por segunda vez haces Trash := TTrash.Create;
Se crea el objeto que he puesto en verde, y a la variable Trash, (el azul) se
le pone 300 en este caso.

Bien, como ves la variable Trash (en azul) ahora tiene la dirección 300, por
tanto, el primero que se creó (el rojo), ya no puedes acceder a él. De ahora
en adelante Trash, hace referencia al verde, el rojo se queda en Memoria
Ram:
- sin poder acceder a él
- Sin poder liberar la memoria

Es decir, el objeto rojo se queda en el limbo.

Esto es lo que te ocurre con los 2 primeros Trash que creas, y solo puedes
acceder al último Trash, en concreto:
Código Delphi [-]
until (Token = '}') or (k = LinesOfCode.Count - 1);
        Trash := TTrashLine.Create;
        Trash.LineNumber := k;
        Trash.TrashType := 'MC';
        FTrashList.Add(Trash);
Los 2 Trash anteriores se quedan en el limbo.

Por eso decía que pongas 3 variables Trash.

Edito: Pon la implementación de FTrashList y como creas FTrashList y como la destruyes. Sin eso no puedo ayudarte.

Espero que se entienda.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 15-11-2005 a las 15:30:34.
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 03:46:05.


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