Question

J'ai une idée pour un projet passe-temps qui effectue une analyse de code et la manipulation. Ce projet nécessitera à la fois le béton et les arbres de syntaxe abstraite d'un fichier source donné. En outre, des références bidirectionnelles entre les deux arbres seraient utiles. Je voudrais éviter le travail de transcrivant une grammaire pour construire mon propre analyseur et lexer.

Y at-il un format standard pour décrire soit des arbres de syntaxe béton ou abstraites? Effectuez l'une des chaînes d'outils largement utilisé le soutien à la sortie de ces formats?

Je n'ai pas un langage de programmation cible particulière à l'esprit. Tout populaire fera pour un prototype, mais je préférerais que je connais bien. Python, C #, Javascript, ou C / C ++

Je voudrais la possibilité d'exécuter un fichier source à travers un outil ou d'une bibliothèque et récupérer les deux arbres. Dans un monde idéal, il serait utile d'exécuter cet outil sur le code tel qu'il est en cours d'édition par un utilisateur et tolérant des erreurs. Encore une fois, je suis simplement en train de développer un prototype, de sorte que ces exigences sont assez laxistes.

Merci!

Était-ce utile?

La solution

notre projet nous avons défini le métamodèle AST en UML et l'utilisation ANTLR (Java) pour alimenter le modèle. Nous maintenons également les informations de jeton ANTLR après l'analyse syntaxique, mais nous avons pas encore essayé de mettre à jour le fichier texte sous-jacent avec les modifications apportées sur le modèle.

a une tête hideuse (dans les infrastructures, telles que Eclipse UML2 / FEM), mais notre objectif est d'utiliser des outils de haut niveau pour le modèle basé / axée sur le développement (MDD, MDA) de toute façon, nous avons donc décidé de l'utiliser à chaque niveau.

Je pense que l'un de nos étudiants une fois joué avec openArchitectureWare et a réussi à obtenir des changements de l'basé sur Eclipse , éditeur de nouveau dans l'généré arbre de syntaxe (non liée au modèle UML ci-dessus) automatiquement, mais je ne connais pas les détails à ce sujet.

Vous pouvez également regarder arbre grammaires de ANTLR.

Autres conseils

La communauté de recherche a décidé que le graphique échange était la bonne chose à faire lorsque l'information se déplaçant d'un outil d'analyse du programme à l'autre. Voir http://www.gupro.de/GXL

Plus récemment, l'OMG a défini une norme pour interchanger syntaxe abstraite des arbres. Voir http://www.omg.org/spec/ASTM/1.0/Beta1/

Ce problème semble se résoudre encore et encore. Il y a une demi-douzaine de propositions « de bus d'outils » au fil des ans que tout résolu, sans jamais dépasser un l'industrie. Le problème est que a) il est facile de représenter à l'aide RSHS tout type de notation emboîtable [entre parenthèses comme LISP,  comme XML, ...] afin que les gens roulent leur propre solution facilement, et b) pour un outil pour échanger un AST avec l'autre, ils les deux doivent se mettre d'accord sur l'essentiel ce que les nœuds AST moyenne; mais la plupart sont plutôt accidentellement RSHS dérivés du particulier La technologie de grammaire / analyse syntaxique utilisé par chaque outil, et il y a presque toujours un désaccord à ce sujet entre les outils. Alors, je l'ai vu très peu d'outils que l'échange RSHS de façon significative.

Si vous faites une chose passe-temps, je bâton avec un Lisp le codage des arbres, où chaque noeud a le format suivant:     (...) Il est facile de générer, et facile à lire.

Je travaille sur un professionnel pour manipuler des programmes . Si nous ont imprimer l'AST, nous faisons ce qui précède. La plupart du temps individuel Sont RSHS beaucoup trop compliqué à regarder dans la pratique, donc nous avons presque jamais imprimer le AST entier, au mieux un nœud et quelques enfants profonds. Notre outil n'échange Avec tout le monde RSHS (voir ci-dessus :) raisons, mais ne vient beau bâtiment en mémoire, faire des choses avec elle whizzy pour des raisons d'analyse ou pour des raisons de transformation, puis soit juste deleteing il (pas besoin de l'envoyer partout) ou régénérer le texte de la langue d'origine de l'arbre. [Ce dernier signifie que vous avez besoin anti-parser, ou « prettyPrinting » technologie]

Des normes spécifiques sont une attente, alors que plus de normes d'usage général peuvent également convenir. Ira Baxter a déjà mentionné GXL et ASTM , un autre, bien plutôt des objectifs un type spécifique de langage de programmation (langages logiques), est une norme pour graphe sémantique / conceptuel , connu sous le nom ISO-IEC 24707 2007 .

Pas une norme en soi, mais un article sur cette question: Vers Portable code source Représentations Utilisation de XML .

Je ne sais pas standard utilisé efficacement (dans ce domaine, qui est toujours la cuisine partout fait maison), je suis intéressé aussi à ce sujet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top