Question

Je travaille sur un projet d’école d’ingénierie inverse, qui nécessite de traduire en manipulation AST le projet C # compilé. J'ai vu le message sur "Traduire le code C # en AST?" sur ce site, mais cela ne ressemble pas à celui que je cherche.

D'après ce que je sais, actuellement, C # ne fournit pas de classe de bibliothèque faisant quelque chose de similaire à Java: http://help.eclipse.org/help33/index .jsp? topic = / org.eclipse.cdt.doc.isv / référence / api / org / eclipse / cdt / core / dom / ast / ASTVisitor.html . Si une telle classe de bibliothèque existe en C #, tout est résolu ici.

J'ai consulté quelqu'un et voici les solutions possibles. Mais j'ai également du mal à trouver des solutions:

  1. Recherchez un autre compilateur fournissant une bibliothèque permettant à son AST d'être exposé à des fins de manipulation. Mais je ne trouve pas un compilateur comme celui-là.
  2. Utilisez ANTLR Parser Generator pour créer mon propre compilateur (le processus sera beaucoup plus difficile et plus long). Le téléchargement fournit des exemples de grammaires pour différentes langues mais pas le C # (il contient des grammaires écrites dans différentes langues, dont le C # mais pas pour produire une grammaire C #). Le problème est donc que je ne trouve pas la grammaire C #.

Quel est le moyen le plus court et le plus rapide d’aborder ce problème? Si je dois vraiment prendre l’une des solutions ci-dessus, comment dois-je résoudre le problème auquel je suis confronté?

Était-ce utile?

La solution 3

ANTLR n’est pas un bon choix. J'essaie maintenant d'utiliser Mono Cecil à la place. Mono Cecil est idéal pour analyser tous les codes de source pouvant être compilés en langage intermédiaire commun (CIL). L’inconvénient est qu’il n’est pas correctement documenté.

Autres conseils

Je sais que la réponse à cette question a été acceptée il y a longtemps. Mais j'avais une question similaire et je n'étais pas sûr des options possibles. J'ai effectué une petite enquête sur la bibliothèque NRefactory fournie avec SharpDevelop. Il génère un AST à partir de code C #.

Voici une image de l'application de démonstration NRefactory qui fait partie du code source SD. Tapez du code C # pour générer et afficher l'AST dans une arborescence.

alt text

Pourquoi ne pas essayer NRefectory . Je l’ai déjà vu discuter de choses AST dans certains forums SharepDevelop .

Voici un article sur le CodeProject sur ce sujet.

Je viens de répondre sur un autre sujet, ici, chez StackOverflow, une solution dans laquelle j'ai implémenté une API pour créer et manipuler AST à partir du code source C #

Un analyseur C # 3.0 complet est disponible avec notre DMS Software Reengineering Tool . (DMS pour faire court). Il a été utilisé pour traiter des dizaines de milliers de fichiers C # avec précision. Il fournit la construction automatisée AST, la traversée des arbres, correspondance de motif de surface-syntaxe et transformation et beaucoup plus. En tant que produit commercial, cela pourrait ne pas marcher pour un projet étudiant.

ANTLR propose sans doute un analyseur C #, mais je ne sais pas qu'il soit complet ou robuste, ou si elle construit réellement des AST.

[EDIT 25 janvier 2010: l'analyseur C # 4.0 est maintenant disponible pour DMS avec toutes les propriétés ci-dessus]

[EDIT mai 2016: analyseur C # 6.0 disponible pour DMS.]

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