2009-12-23 26 views
10

Estoy creando un árbol para representar un lenguaje simple. Estoy muy familiarizado con Abstract Syntax Trees, y he trabajado en frameworks para compilarlos y usarlos en C++. ¿Hay una biblioteca de python estándar para especificar o manipular AST arbitrarios? En su defecto, ¿existe una biblioteca de árbol que sea útil para el mismo propósito?Biblioteca para programar Árboles sintácticos abstractos en Python

Nota, no estoy manipulando Python ASTs, por lo que creo que el módulo AST no es adecuado.

Respuesta

7

Los AST son muy simples de implementar en Python. Por ejemplo, para mi proyecto pycparser (un analizador de C completo en Python) he implementado AST basados ​​en ideas tomadas de los módulos de Python. Los diversos nodos AST se especifican en un archivo de configuración YAML y genero el código Python para estos nodos en Python.

+0

bastante agradable. tenía la esperanza de algo ya muy bien abstraído en una biblioteca, con la documentación, etc (sin ofender). Mi gramática tiene sólo 6 tipos, por lo es relativamente sencillo escribirlo o Yo mismo. Solo pensé que podría haber una biblioteca estándar que usan las personas. –

+0

@Paul, si lo piensa, la mejor manera de usar un AST es definir una clase para cada tipo de nodo. Esta es la forma más polimórfica y limpia de atravesar el árbol más tarde (con un NodeVisitor). Por lo tanto, tienes que escribir esas clases de todos modos. Teniendo en cuenta qué tan poco código requiere un AST en Python, dudo que se necesite una biblioteca aquí –

+0

@AndersonGreen: gracias, actualicé el enlace principal y eliminé otros –

0

Si representa sus elementos de gramática como expresiones en pyparsing, puede adjuntar una acción de análisis a cada expresión que devuelve una instancia de clase que contiene los tokens analizados en un tipo específico de analizador. Hay un par de ejemplos en el wiki de pyparsing que ilustran esta técnica (invRegex.py, simpleBool.py y evalArith.py). (Estas gramáticas todos utilizan el operatorPrecedence incorporado, que puede ocultar algo de la estructura gramatical, pero

1

pyast es un paquete para la construcción de árboles de sintaxis abstracta declarativas.

Cuestiones relacionadas