¿Algún consejo sobre parser tipo rex /ruby-lex/racc/ruby-yacc/coco-rb ...?

Hola, llevo un largo rato buscando qué solución escoger para parsear en
Ruby
un protocolo de texto. Concretamente quiero hacer un pequeño stack del
protocolo SIP (para quien no sepa es un protocolo muy parecido al HTTP
aunque
bastante más complejo).

Primeramente estaba haciendo el parsing “a pelo”: usaba gets(), un par
de
split(), verificar si la línea era sólo un CLRF, o si empezaba por un
espacio
para saber que era continuación de la cabecera de la línea anterior
(line
folding), etc…

Ahora me he enterado de que para esto se suele usar LARL y parseadores
que lo
implementan como Lex+Yacc y tal. Voy a dedicar tiempo a aprender sobre
este
tema pero me gustaría recibir alguna indicación que me guíe en la
dirección
correcta.

Primeramente trataré de aprender sobre Yacc + Lex (que entiendo es la
base) y
luego escogeré alguna implementación similar para Ruby.

Veo que en Ruby existen unas cuantas alternativas:

En fin, ¿qué me recomendáis? mi idea es la de tener un parser elegante,
de
momento no es gran premisa lo rápido que sea (lo hago para aprender
básicamente).

Y sobre todo, veo que Yacc se suele usar con Lex. ¿Necesitaré “rex” si
opto
por “racc”? ¿necesitaré “ruby-lex” si opto por “ruby-yacc”?
¿Alguno de esos proyectos es realmente fiable? (por ejemplo he visto
que “coco-rb” lleva años sin actualizarse y ni siquiera funciona el link
de
descarga).

Gracias por cualquier consejo y un saludo a todos.

Iñaki

2008/3/15 Iñaki Baz C. [email protected]:

Ahora me he enterado de que para esto se suele usar LARL y parseadores que lo
implementan como Lex+Yacc y tal. Voy a dedicar tiempo a aprender sobre este
tema pero me gustaría recibir alguna indicación que me guíe en la dirección
correcta.

Disculpa si sueno rudo, pero, ¿qué tiene que ver esto con Rails?
Para temas de Ruby en particular puedes usar las listas de correo de
Ruby o #ruby en irc.freenode.net

El Sábado, 15 de Marzo de 2008, Federico B.
escribió:> Ruby o #ruby en irc.freenode.net
Tienes razón, pero déjame explicarme:

Efectivamente sé que esta lista es de Rails y que existe otra de Ruby-es a
la
cual estaba subscrito. Desgraciadamente dicha lista tiene un tráfico mínimo.
Sé que ello no es excusa para redirigir mis preguntas a otra lista, pero
hace
un tiempo pregunté en esta lista precisamente si podía o no hacer
consultas sobre Ruby (al margen de Rails).
No recuerdo quién me respondió, pero quien lo hizo comentó que lo había
consultado con el admin de la lista y que la respuesta era “sí” (en vista
del
escaso tráfico en Ruby-es).

No obstante, entiendo perfectamente tu reproche. Yo precisamente soy
bastante
exigente en el cumplimiento de las normas en las listas de correo en las
que
estoy subscrito. En mi caso yo pregunté si las preguntas sobre Ruby tenían
cabida en esta lista, y dada la respuesta yo interpreté que no se
consideraría off-topic.

En cualquier caso, si los demás también opináis que no debería hacer este tipo
de consultas en esta lista respetaré vuestra
opinión.
Saludos y gracias por todo.

Yo considero que cualquier pregunta de Ruby tiene cabida. Acaso Rails no
es
Ruby también?. Además el argumento del tráfico me parecer perfectamente
válido.

Luis Felipe Hurtado C.

El día 15/03/08, Benjamin C. [email protected] escribió:

También opino que la de ruby en español casi no se mueve y creo que el
poco
tráfico que genera es posible manejarlo acá. Yo en lo personal, no le
vería
problema y también me acuerdo de del permiso que dio el mismisimo Manuel
Gonzalez hace ya un tiempo atrás.

Benjamín

2008/3/15 Iñaki Baz C. [email protected]:

On 15/03/2008, Iñaki Baz C. [email protected] wrote:

Para temas de Ruby en particular puedes usar las listas de correo de
Ruby o #ruby en irc.freenode.net

Hola a todos,

a ver si resolvemos esto de forma satisfactoria para todos. Es verdad
que se consultó en su momento si se podían hacer preguntas sobre Ruby
en la lista y dije que me parecía OK, peeeero, aunque no recuerdo si
lo especifiqué o no, yo suponía que ese permiso se aplicaría con
discreción para consultas puntuales, y no supondría un denso chorro de
hilos sobre los aspectos de Ruby menos relacionados con Rails.

Entonces, si me permitís, y dejando claro que realmente Iñaki ha sido
fiel a la letra de la norma, voy a clarificar el espíritu de esta: se
pueden hacer consultas puntuales sobre scripting con Ruby “puro”,
fuera del framework, pero esto es una concesión amistosa, no un cambio
de la temática de la lista, que sigue siendo el framework Rails. Así
que os pido que apliquéis este derecho con cabeza: uno, dos o tres
hilos al mes, correcto. Cinco hilos a la semana, no :slight_smile:

En todo caso, estoy seguro de que no hay problema en que los
interesados podamos suscribirnos a la lista de ruby-es y darle
nosotros mismos volumen si es necesario :slight_smile:


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

On 16/03/2008, Luis Felipe Hurtado C.
[email protected] wrote:

Yo considero que cualquier pregunta de Ruby tiene cabida. Acaso Rails no es
Ruby también?. Además el argumento del tráfico me parecer perfectamente
válido.

Uhhh, no :slight_smile:

La lista se llama ror-es y va sobre el framework Rails. Rails es Ruby,
pero también es HTML o CSS por ejemplo, y no por eso caben discusiones
sobre estos. Las listas de Django, Drupal o Rails no tienen por qué
aceptar discusiones sobre Python, PHP o Ruby, no más de lo que deben
aceptar discusiones sobre Pylons, Code Igniter, Sinatra o Camping.

Si se cree que Rails no merece una lista propia, pues la hacemos
desaparecer dentro de ruby-es. Si se cree que sí lo merece, respetamos
el campo de
actuación.

Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

existe ruby-es?

El 16/03/2008, a las 11:42, Manuel González Noriega
escribió:

On 16/03/2008, Luis Felipe Hurtado C.

On 16/03/2008, Listas [email protected] wrote:

existe ruby-es?

No se llama exactamente así, pero

https://listas.escomposlinux.org/mailman/listinfo/rubies

Si alguien me informa sobre el estado de la lista rubies, agradecido.
Y si está muerta y hay interés en que la refunde como hermanita de
ror-es, no hay problema.


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

El Domingo, 16 de Marzo de 2008, Manuel González Noriega
escribió:

La lista se llama ror-es y va sobre el framework Rails. Rails es Ruby,
pero también es HTML o CSS por ejemplo, y no por eso caben discusiones
sobre estos. Las listas de Django, Drupal o Rails no tienen por qué
aceptar discusiones sobre Python, PHP o Ruby, no más de lo que deben
aceptar discusiones sobre Pylons, Code Igniter, Sinatra o Camping.

Estoy de acuerdo, yo mismo pertenezco a diversas listas de una temática
propia
y por supuesto dicha temática tiene relación con otras, o están construidas
con otras, etc. Y no por eso deben tener cabida cosas relacionadas. Si
no el
objetivo de la lista se
desvirtúa.

El Domingo, 16 de Marzo de 2008, Manuel González Noriega
escribió:> On 16/03/2008, Listas [email protected] wrote:

existe ruby-es?

No se llama exactamente así, pero

https://listas.escomposlinux.org/mailman/listinfo/rubies

Si alguien me informa sobre el estado de la lista rubies, agradecido.
Y si está muerta y hay interés en que la refunde como hermanita de
ror-es, no hay problema.

Voy a mandar un ping por ahí a ver cuántos pong recibo XD

El Domingo, 16 de Marzo de 2008, Listas
escribió:> existe ruby-es?

Sí, es ésta:
https://listas.escomposlinux.org/mailman/listinfo/rubies

Tiene poco tráfico pero tal vez los interesados sólo en Ruby podríamos
rellenarla XD

On 16/03/2008, Iñaki Baz C. [email protected] wrote:

El Domingo, 16 de Marzo de 2008, Manuel González Noriega escribió:

Si alguien me informa sobre el estado de la lista rubies, agradecido.
Y si está muerta y hay interés en que la refunde como hermanita de
ror-es, no hay problema.

Según el archivo de dicha lista, sólo dos correos en enero, 9 en febrero y de
momento 5 en marzo.

Sí, lo podría haber mirado yo mismo :wink:

Pues a mi me parece que lo mejor es que los interesados de ror-es se
suscriban también a rubies y charlen allí sobre parsers y cosas
complicadas que los de web no entendemos :wink:


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

El Domingo, 16 de Marzo de 2008, Manuel González Noriega
escribió:>

Pues a mi me parece que lo mejor es que los interesados de ror-es se
suscriban también a rubies y charlen allí sobre parsers y cosas
complicadas que los de web no entendemos :wink:

Ya lo he hecho :slight_smile:

El Domingo, 16 de Marzo de 2008, Manuel González Noriega
escribió:

Si alguien me informa sobre el estado de la lista rubies, agradecido.
Y si está muerta y hay interés en que la refunde como hermanita de
ror-es, no hay problema.

Según el archivo de dicha lista, sólo dos correos en enero, 9 en febrero y de
momento 5 en marzo.

Yo llevo tiempo en esa lista y no está muy activa que digamos…

Manuel González Noriega escribió:

El 16/03/2008, a las 12:44, Iñaki Baz C.
escribió:

El Domingo, 16 de Marzo de 2008, Listas escribió:

existe ruby-es?

Sí, es ésta:
https://listas.escomposlinux.org/mailman/listinfo/rubies

Tiene poco tráfico pero tal vez los interesados sólo en Ruby podríamos
rellenarla XD

ya hay uno más :slight_smile:

Iñaki Baz C. wrote:

Hola, llevo un largo rato buscando qué solución escoger para parsear en
Ruby
un protocolo de texto. Concretamente quiero hacer un pequeño stack del
protocolo SIP (para quien no sepa es un protocolo muy parecido al HTTP
aunque
bastante más complejo).

Zed S. usó Ragel [1] para implementar el parser de HTTP que emplea
Mongrel. Así que si HTTP puede analizarse mediante una máquina de
estados, tal vez puedas conseguirlo con SIP.

1.- http://www.cs.queensu.ca/~thurston/ragel/

Hola Iñaki, solo decirte, que yo te aconsejaría, que a no ser que te
fuera completamente necesario usar un LARL, intentases, como tu dices,
hacerlo más bien a pelo, lo digo, porque yo tuve una asignatura dedicada
al tema(procesadores de lenguajes), y te aseguro que es de todo menos
sencillo, y para llegar a entender los LARL, antes tienes que empaparte
de unos cuantos conceptos y te va a llevar bastante tiempo.
Aun con todo, aqui puedes encontrar información de referencia sobre el
tema http://www.lsi.uned.es/procleng/ dentro de los analizadores
sintácticos ascendentes.Y por cierto, antes de decidirte por los LARL,
deberias mirar que tipo de analizador sintáctico te combiene más.
Un saludo y suerte!
El sáb, 15-03-2008 a las 21:55 +0100, Iñaki Baz C. escribió:

El Lunes, 17 de Marzo de 2008, Fernando Martinez G. escribió:

Hola Iñaki, solo decirte, que yo te aconsejaría, que a no ser que te
fuera completamente necesario usar un LARL, intentases, como tu dices,
hacerlo más bien a pelo, lo digo, porque yo tuve una asignatura dedicada
al tema(procesadores de lenguajes), y te aseguro que es de todo menos
sencillo, y para llegar a entender los LARL, antes tienes que empaparte
de unos cuantos conceptos y te va a llevar bastante tiempo.
Aun con todo, aqui puedes encontrar información de referencia sobre el
tema http://www.lsi.uned.es/procleng/ dentro de los analizadores
sintácticos ascendentes.

Muchas gracias por la info y por el buen enlace. Me constaba que es un
tema
muy complejo.

Y por cierto, antes de decidirte por los LARL,
deberias mirar que tipo de analizador sintáctico te combiene más.
Un saludo y suerte!

Pues tengo una buena noticia para mí xDD
He encontrado un proyecto en Ruby puro que facilita el parsing
tremendamente:
http://treetop.rubyforge.org/
Permite hacer un parsing recursivo de manera muy sencilla, jugando con
clases
y métodos, lo que lo hace muy fácil de usar. Una maravilla.

Más adelante, si es necesario ya indagaré más en estos temas de parsing,
LARL,
LL y demás, que al fin y al cabo el parseador es una capa del programa y
por
tanto, si está bien diseñado debe ser posible sustituirlo.

Saludos y gracias.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs