Muchas gracias a todos por las respuestas.

Al final era más fácil de lo que pensaba. Por un lado necesitaba un tipo de etiquetas para delimitar unos bloques en el archivo de texto y por otro otras etiquetas de las que tenía que establecer unos parámetros. El asunto es que no había nada de recursividad, con lo que separando el archivo en bloques y luego leyendo línea por línea con expresiones regulares me las puedo apañar.

De nuevo gracias :) ¡Un saludo!

Juanlu

On 07/03/2014 11:53 AM, Chema Cortes wrote:
El 2 de julio de 2014, 23:27, Juan Luis Cano <juanlu...@gmail.com <mailto:juanlu...@gmail.com>> escribió:

    Hola a todos, como no sé mucho sobre conceptos teóricos de
    programación me gustaría hacer una consulta a la lista a ver si
    alguien me puede ayudar.

    Necesito crear un lenguaje de etiquetas para que el usuario pueda
    escribir una especie de «plantilla» con él y que el programa
    extraiga una información de él y genere unos datos. A grandes
    rasgos algo así:

    [TITULO]
    Aquí va el título, bla bla

    [META1]
    Más información

    [BLOQUE1]

    [PARAM1][XX,00-10,99]

    [FIN_BLOQUE1]

    Mi primera aproximación ha sido ir «parseando» el archivo caracter
    a caracter, porque el programa no sabe lo que va a leer. Abro
    corchete [, cierro corchete ], si encuentro texto entonces hago
    esto, si no lo otro... Sin embargo me figuro que a medida que el
    lenguaje crezca en complejidad puedo verme en serios problemas, y
    además entiendo que este proceso no es nuevo.

    ¿Pensáis que para este tipo de cosas es mejor utilizar algo tipo
    pyparsing o PLY? ¿O tal vez tratar de traducir esto a un lenguaje
    de marcas ya conocido como XML y utilizar herramientas ya
    disponibles para ello? ¿Podría limitarme a expresiones regulares o
    necesitaría una gramática libre de contexto?


Parece que necesitas un "lenguaje de marcas" para parametrizar una aplicación. Lo normal sería usar XML ó JSON/YAML, pero no sé qué grado de complicación esperas que pase. JSON es bastante fácil y directo de usar y siempre puedes pasar a YAML si requieres tipos de datos más específicos y complicados. Por otro lado, XML tiene herramientas de procesado semántico y numerosos estándares de integración que lo hacen más compatible con otras aplicaciones.

Si la complejidad viene desde la necesidad de ser más "expresivo", la solución pasa por crearte un DSL. Con python no es tarea imposible, pero hay otros lenguajes que se prestan más a ello como son lua, ruby o scala (por decir unos pocos similares a python). Lua es bastante flexible para esta tarea y es sencillo empotrarlo a través del módulo Lupa para python.

Es mejor que el usuario "colabore" y escriba la información lo más fácil posible (eg: ConfigParser). Lo que sí que te recomiendo es que evites crear un lenguaje nuevo. Es mucho trabajo y complicas más tu problema que lo que se simplifica.


    Espero haberme explicado bien, me temo que no puedo dar muchos
    detalles o ejemplos concretos. Si tengo que contar algo un poco
    mejor haré lo que pueda.

    Un saludo y gracias de antemano

    Juanlu



--
Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": http://ch3m4.org/blog
Buscador Python Hispano: http://ch3m4.org/python-es


_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a