11
votes

Bibliothèque de programmation Arbres de syntaxe abstraite en Python

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?

note, je ne manque pas python asts , donc je pense que le module AST ne convient pas.


0 commentaires

4 Réponses :


8
votes

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.


3 commentaires

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



0
votes

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 , 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


0 commentaires

0
votes

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.

http: // chris-agneau. Co.uk/2006/12/08/visitor-pattern-in-python/


1 commentaires

Cet article fournit une bonne mise en œuvre réelle du modèle: Tavianator.com/the-Visitor- Motif-in-Python .



1
votes

Pyast est un package pour la construction de syntaxe abstraite déclarative arbres.


0 commentaires