Je crée un arbre pour représenter une langue simple. Je suis très familier avec les arbres syntaxes abstraits et j'ai travaillé sur des frameworks pour les bâtiments et les utiliser en C ++. Existe-t-il une bibliothèque python standard pour spécifier ou manipuler des asts arbitraires? À défaut, existe-t-il une bibliothèque d'arbres qui est utile dans le même but? P>
note, je ne manque pas python asts em>, donc je pense que le module AST ne convient pas. P>
4 Réponses :
Les asts sont très simples à mettre en œuvre dans Python. Par exemple, pour mon Projet PCYPARSER (un analyseur C complet en Python) J'ai mis en œuvre des asts basés sur des idées emprunté auprès des modules de Python. Les différents nœuds AST sont spécifiés dans un fichier de configuration YAML et je génère un code Python pour ces nœuds dans Python lui-même. P>
Plutôt sympa. J'avais espéré quelque chose déjà bien résumé dans une bibliothèque, avec une documentation, etc. (sans infraction). Ma grammaire n'a que 6 types, donc son relativement simple de l'écrire moi-même. Je pensais juste qu'il pourrait y avoir une bibliothèque standard que les gens utilisent.
@Paul, si vous lui donnez une pensée, la meilleure façon d'utiliser une AST est de définir une classe pour chaque type de noeud. C'est le moyen le plus polymorphe et le moyen propre de traverser l'arbre plus tard (avec un NODEVISITOR). Par conséquent, vous devez écrire ces cours de toute façon. Compte tenu de la quantité de code AST à Python, je doute qu'une bibliothèque soit nécessaire ici
@Andersongreen: merci, rafraîchis le lien principal et supprimé d'autres
Si vous représentez vos éléments de grammaire en tant que expressions pymparsing, vous pouvez attacher une action d'analyse à chaque expression qui renvoie une instance de classe contenant les jetons analysés dans un type spécifique à un analyseur. Il y a quelques exemples sur le wiki pygarsing qui illustrent cette technique ( Invregex.py A>, SimpleBool.py et évalirmith.py ). (Ces grammaires utilisent tous l'opérateurPréCédence intégrée, qui peut masquer une partie de la structure de la grammaire, mais p>
Cette entrée de blog, bien que court sur les détails de la mise en œuvre, décrit une belle interface que Python Asts pourrait mettre en œuvre. P>
http: // chris-agneau. Co.uk/2006/12/08/visitor-pattern-in-python/ P>
Cet article fournit une bonne mise en œuvre réelle du modèle: Tavianator.com/the-Visitor- Motif-in-Python .
Pyast code>
est un package pour la construction de syntaxe abstraite déclarative arbres. P>