Mini-lenguajes en Python
dsl (6)
Para ser productivo, siempre usaría un generador de analizadores como CocoPy ( Tutorial ) para transformar tu gramática en un analizador (correcto) (a menos que quieras implementar el analizador manualmente por el bien de aprender).
El resto es escribir el intérprete / compilador real (Crear código de bytes basado en pila o memoria AST para interpretar y luego evaluar).
Después de crear un analizador de mini lenguaje simple en Python, programando cerca del dominio del problema y todo eso.
De todos modos, me preguntaba cómo la gente de aquí iría haciendo eso, ¿cuáles son las formas preferidas de hacer este tipo de cosas en Python?
No voy a dar detalles específicos de lo que busco porque en este momento estoy investigando lo fácil que es todo este campo en Python.
¡Gracias por tu contribución!
Python es un lenguaje maravillosamente simple y extensible que sugiero simplemente crear un módulo completo de python y codificar contra eso.
Veo que mientras escribí lo anterior, ya se ha mencionado PLY
.
Si me preguntas esto ahora, probaría la biblioteca textx para Python. ¡Puedes crear un dsl fácilmente con python! Las ventajas son que crea un AST para usted, y el léxico y el análisis se combinan.
Tengo una experiencia limitada pero positiva con PLY (Python Lex-Yacc). Combina la funcionalidad Lex y Yacc en una sola clase de Python. Es posible que desee comprobarlo.
El compañero ''er Ned Batchelder tiene una buena visión general de las herramientas disponibles en su sitio web. También hay una descripción general en el sitio web de Python .
Pyparsing es útil para escribir "pequeños idiomas". Realicé una presentación en PyCon''06 sobre cómo escribir un sencillo motor de juegos de aventuras, en el que el lenguaje que se analizaba e interpretaba era el conjunto de comandos del juego ("inventario", "tomar espada", "libro desplegable", etc.). (Código fuente here ).
También puede encontrar enlaces a otros artículos de pyparsing en la página Pyrarsing wiki Publications .
Yo recomendaría funcparserlib
. Fue escrito especialmente para analizar pequeños lenguajes y DSL y es más rápido y más pequeño que pyparsing
(ver estadísticas en su página de inicio). Los programadores minimalistas y funcionales deberían gustar funcparserlib
.
Editar: por cierto, soy el autor de esta biblioteca, por lo que mi opinión puede ser parcial.