ATParserCompiler

0 views
Skip to first unread message

Juan Manuel

unread,
Feb 25, 2010, 8:51:22 AM2/25/10
to ClubSmalltalk
Gente, como andan tanto tiempo?, hace mucho que no envio nada al
grupo, pero acostumbro leer los resumenes!!, en esta oportunidad me
encuentro ante una dificultad que espero me puedan ayudar a resolver.
Estoy tratando de escribir un mini lenguaje estilo SQL que me permita
ejecutar consultas sobre una coleccion de objetos. Leyendo en la
documentacion de VisualWorks encontre en un documento llamado
BasicLibraries que existen un conjunto de clases en el package
ARParserCompiler que pueden utilizarse para tal fin, ademas proveen de
otro package llamado ATParserExample con una implementacion de ejemplo
de un interprete de SQL, el cual probe y esta muy bueno, ya que
corrige sintaxis y compila codigo con un compilador de sql
(SQLCompiler), el tema es que hasta aca muy bueno... pero no es tan
facil como parece, hay que definir las reglas a traves de pattern
matching y para lo cual se utilizan un monton de caracteres especiales
que no tengo idea de como usar. Por otro lado, una vez creado este
ParserCompiler, tengo que generar un codigo smalltalk para ejecutar
contra la coleccion de objetos y esto si que no aparece en el ejemplo.
Alguno de ustedes ha trabajado con estas clases y puede explicarme un
poco mejor su funcionamiento? Quizas haya una solucion mas sencilla
para mi problema, es comun en mi complicarme la vida con cosas como
estas, pero no puedo con mi genio, las cosas deben hacer lo mejor que
uno pueda... para bajar hay tiempo!!!

Saludos a todos,
Felicitaciones a Edgar!,

Juan Manuel Diaz

Mariano Martinez Peck

unread,
Feb 25, 2010, 9:40:38 AM2/25/10
to clubsm...@googlegroups.com
Yo vi un ejemplo del  Helvetia de Lukas Renggli  donde hacía mas o menos eso.

Te paso el link por si te sirve

http://scg.unibe.ch/research/helvetia

saludos

Mariano

2010/2/25 Juan Manuel <juanmanu...@gmail.com>

--
To post to this group, send email to clubSm...@googlegroups.com
To unsubscribe from this group, send email to clubSmalltal...@googlegroups.com

http://www.clubSmalltalk.org

Mariano Martinez Peck

unread,
Feb 25, 2010, 9:50:29 AM2/25/10
to clubsm...@googlegroups.com
Perdón, me olvidé este link: http://scg.unibe.ch/research/helvetia/examples

Ahí podes ver varios ejemplos, incluido uno de SQL.

Saludos

Mariano

2010/2/25 Mariano Martinez Peck <maria...@gmail.com>

GallegO

unread,
Feb 25, 2010, 10:48:42 AM2/25/10
to clubsm...@googlegroups.com
Hola:

No te olvides de ver la página de SmaCC

http://www.refactory.com/Software/SmaCC/index.html

Un compañero que entiende como definir la gramatica usa el de Dolphin
y anda perfecto.

Ahora, escribir SQL para consultar colecciones de objetos???? Cada
loco con su tema jaja :)

Saludos
GallegO

Angel "Java" Lopez

unread,
Feb 25, 2010, 11:58:49 AM2/25/10
to clubsm...@googlegroups.com
Hola gente!

Gracias por los enlaces, ya agregados a
http://delicious.com/ajlopez/smalltalk

Hay varios Object Query Language en otras tecnologías, y son bastante
usados. Uno de los mas populares es Linq, de .NET, que a veces se extrania
en Java.

Una estrategia a seguir: permitir que cada query definida en el lenguaje de
consulta, se pueda ejecutar con métodos agregados a colecciones de objetos,
tipo (imagino en el aire)

aColl select: [....projection....] "un bloque que tome un element de la
colección y devuelva el elemento de la colección nueva que se esta formando"
aColl selectFirst: [....projection....]
aColl where: [... critera...] "un bloque que tome un element de la coleccion
y devuelva verdadero o falso"
aColl orderBy: [.... order criteria ...]
aColl skip: 10 take: 20 "para saltear 10 elementos, y tomar los proximos 20"

Supongo que debe haber algo asi ya escrito en librerías de Smalltalk, y en
la propia librería base, cuales eran? Hmm... me patina la neurona... :-)

Y luego recién ahí, implementar una gramatica para otro lenguaje mas OQL,
SQL

Nos leemos!

Angel "Java" Lopez
http://www.ajlopez.com/
http://twitter.com/ajlopez

-----Mensaje original-----
De: clubsm...@googlegroups.com [mailto:clubsm...@googlegroups.com]
En nombre de GallegO
Enviado el: jueves, 25 de febrero de 2010 12:49
Para: clubsm...@googlegroups.com
Asunto: Re: [clubSmalltalk] ATParserCompiler

Hola:

http://www.refactory.com/Software/SmaCC/index.html

Saludos
GallegO

--

To post to this group, send email to clubSm...@googlegroups.com
To unsubscribe from this group, send email to
clubSmalltal...@googlegroups.com

http://www.clubSmalltalk.org
No virus found in this incoming message.
Checked by AVG - www.avg.com
Version: 8.5.435 / Virus Database: 271.1.1/2707 - Release Date: 02/24/10
07:34:00

Mariano Martinez Peck

unread,
Feb 25, 2010, 4:39:39 PM2/25/10
to clubsm...@googlegroups.com
Perdón que me vaya un poco offtopic, pero justo hoy Lukas hizo un post interesante:

http://www.lukas-renggli.ch/blog/petitparser-1

saludos

Mariano

2010/2/25 Angel "Java" Lopez <webm...@ajlopez.com>

Guillermo Schwarz

unread,
Feb 25, 2010, 11:23:15 PM2/25/10
to clubsm...@googlegroups.com, guillerm...@gmail.com
La idea de Angel está interesante.


aColl select: [....projection....]  "un bloque que tome un element de la
colección y devuelva el elemento de la colección nueva que se esta formando"
aColl selectFirst: [....projection....]
aColl where: [... critera...] "un bloque que tome un element de la coleccion
y devuelva verdadero o falso"
aColl orderBy: [.... order criteria ...]
aColl skip: 10 take: 20 "para saltear 10 elementos, y tomar los proximos 20"

Cada uno de esos debe retornar un collectionStream que sea algo así como un cursor, pero que tenga el mismo protocolo de un collection de modo que sea un drop in replacement de collection y que permita operar como si fuera un pipe a un collection.

Entonces si collectionStream implementa el mismo protocolo de collection descrito arriba, se puede armar sentencias SQL sin necesidad de escribir SQL, y hacer un interprete de SQL se volvería trivial...

Saludos,
Guillermo.

2010/2/25 Mariano Martinez Peck <maria...@gmail.com>
Perdón que me vaya un poco offtopic, pero justo hoy Lukas hizo un post interesante:



--
Saludos cordiales,

Guillermo Schwarz
Sun Certified Enterprise Architect

Claudio

unread,
Feb 28, 2010, 7:42:36 PM2/28/10
to ClubSmalltalk
Hola Angel (Tanto tiempo!!), Hola Guillermo (De todo corazón espero
que estén lo mejor posible de tu lado de la cordillera)
Los métodos que necesitás, ya están todos:
- - aColl select: [....projection....] "un bloque que tome un
element de la
- - colección y devuelva el elemento de la colección nueva que se
esta formando"
eso hace el #collect: aBlock (En realidad te devuelve una collection
nueva, que es el resultado de aplicar el bloque a cada elemento de la
receptora)

- - aColl selectFirst: [....projection....]
#first (Hagamos la salvedad de que se trate de una coleccion con
orden)

- - aColl where: [... critera...] "un bloque que tome un element de
la coleccion
- - y devuelva verdadero o falso"

es el famoso #select: aBlock

. . aColl orderBy: [.... order criteria ...]
#asSortedCollection: aSortBlock (el sortBlock especifica el criterio
de orden)
- - aColl skip: 10 take: 20 "para saltear 10 elementos, y tomar los
proximos 20"
Te lo dejo como ejercicio para hacer en el desayuno

Guillermo, con respecto a lo del Stream cursor:
La principal ventaja de los cursores cuando usamos SQL, es la de no
traer a memoria todos los objetos (registros, perdón), y en cambio,
recorrerlos en la misma base de datos, el cursor sólo "recuerda" la
posición del próximo elemento y sabe como avanzar y eventualmente
retroceder.
Si la collection ya está en memoria, como es el caso para una
collection standar de un Smalltalk standar, no hay razones para que
estos métodos creen cursores, si se crea una nueva collection, solo
tendrá referencias a los objetos de la original, y esto no es muy
costoso.
Ahora, si realmente querés un "cursor", no por una cuestión de
"economía" de espacio sino porque lo que querés es que realmente opere
sobre esa collection (y no sobre sus elementos) los Streams de
Smalltalk cumplen ese rol perfectamente, el protocolo no es el mismo
que el de Collection pero no es tan costoso "adaptarlo".
Saludos,
Claudio


On 26 feb, 01:23, Guillermo Schwarz <guillermo.schw...@gmail.com>
wrote:


> La idea de Angel está interesante.
>
> aColl select: [....projection....]  "un bloque que tome un element de la
> colección y devuelva el elemento de la colección nueva que se esta formando"
> aColl selectFirst: [....projection....]
> aColl where: [... critera...] "un bloque que tome un element de la coleccion
> y devuelva verdadero o falso"
> aColl orderBy: [.... order criteria ...]
> aColl skip: 10 take: 20 "para saltear 10 elementos, y tomar los proximos 20"
>
> Cada uno de esos debe retornar un collectionStream que sea algo así como un
> cursor, pero que tenga el mismo protocolo de un collection de modo que sea
> un drop in replacement de collection y que permita operar como si fuera un
> pipe a un collection.
>
> Entonces si collectionStream implementa el mismo protocolo de collection
> descrito arriba, se puede armar sentencias SQL sin necesidad de escribir
> SQL, y hacer un interprete de SQL se volvería trivial...
>
> Saludos,
> Guillermo.
>

> 2010/2/25 Mariano Martinez Peck <marianop...@gmail.com>


>
>
>
>
>
> > Perdón que me vaya un poco offtopic, pero justo hoy Lukas hizo un post
> > interesante:
>
> >http://www.lukas-renggli.ch/blog/petitparser-1
>
> > saludos
>
> > Mariano
>

> > 2010/2/25 Angel "Java" Lopez <webmas...@ajlopez.com>

> >> clubSmalltal...@googlegroups.com<clubSmalltalk%2Bunsubscribe@goog­legroups.com>


>
> >>http://www.clubSmalltalk.org
> >> No virus found in this incoming message.
> >> Checked by AVG -www.avg.com
> >> Version: 8.5.435 / Virus Database: 271.1.1/2707 - Release Date: 02/24/10
> >> 07:34:00
>
> >> --
> >> To post to this group, send email to clubSm...@googlegroups.com
> >> To unsubscribe from this group, send email to

> >> clubSmalltal...@googlegroups.com<clubSmalltalk%2Bunsubscribe@goog­legroups.com>


>
> >>http://www.clubSmalltalk.org
>
> >  --
> > To post to this group, send email to clubSm...@googlegroups.com
> > To unsubscribe from this group, send email to

> > clubSmalltal...@googlegroups.com<clubSmalltalk%2Bunsubscribe@goog­legroups.com>


>
> >http://www.clubSmalltalk.org
>
> --
> Saludos cordiales,
>
> Guillermo Schwarz

> Sun Certified Enterprise Architect- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -

Juan Manuel

unread,
Mar 1, 2010, 9:10:30 AM3/1/10
to ClubSmalltalk
Hola gente, bueno, antes de empezar, mis deseos de pronta recuperacion
y no mas victimas en nuestro pais vecino y hermano Chile.

Muchas gracias a todos por los aportes, la idea inicial era hacer algo
de lo que propuso Angel y Claudio, la idea no era hacer un parser
compiler que evalue sintaxis ni esas cosas... pero me parecio
interesante, lo unico que no entiendo de ese tema es como se termina
convirtiendo mi lenguaje en lenguaje smalltalk que ejecute haga cosas
con colecciones y objetos.

Es muy probable que opte por extender alguna coleccion, probablemente
SortedCollection y que le agregue metodos como #select: from: where:,
pero de todos modos me gustaria, en una futura implementacion defenir
un lenguaje para estas cosas. Mas ideas son bienvenidas!,

Saludos,
JM

Alexandre Bergel

unread,
Mar 1, 2010, 9:25:38 AM3/1/10
to clubsm...@googlegroups.com
> Hola gente, bueno, antes de empezar, mis deseos de pronta recuperacion
> y no mas victimas en nuestro pais vecino y hermano Chile.


Gracias! Aunque tiene daños superficiel, tengo que cambiar de
departamento.

Saludos,
Alexandre

--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.

Alexandre Bergel

unread,
Mar 1, 2010, 9:25:41 AM3/1/10
to clubsm...@googlegroups.com
> Hola gente, bueno, antes de empezar, mis deseos de pronta recuperacion
> y no mas victimas en nuestro pais vecino y hermano Chile.
Reply all
Reply to author
Forward
0 new messages