Question

Quels analyseurs sont disponibles pour analyser le code C #?

Je recherche un analyseur C # qui puisse être utilisé en C # et me donne accès aux informations de ligne et de fichier relatives à chaque artefact du code analysé.

Était-ce utile?

La solution

Fonctionne sur le code source:

Fonctionne sur l'assemblage:

Problème lié à l'assemblage " analyse " est que nous avons moins d’informations sur les lignes et les fichiers (les informations sont basées sur un fichier .pdb, et Pdb contient des informations sur les lignes uniquement pour les méthodes)

Je recommande personnellement Mono.Cecil et NRefactory .

Autres conseils

Mono (source ouverte) inclut le compilateur C # (et bien sûr, l'analyseur syntaxique)

Si vous allez compiler des assemblages C # v3.5 en .net:

var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });

http://msdn.microsoft.com/fr us / library / microsoft.csharp.csharpcodeprovider.aspx

Si vous connaissez ANTLR, vous pouvez utiliser la grammaire Antlr C # .

J'ai mis en œuvre exactement ce que vous demandez (analyse AST du code C #) à l'adresse OWASP. Projet O2 Platform utilisant les API SharpDevelop AST.

Afin de faciliter la consommation, j’ai écrit une API rapide qui expose un certain nombre d’éléments clés du code source (utilisant des instructions, des types, des méthodes, des propriétés, des champs, des commentaires) et qui permet de réécrire le code C # d’origine en C #. et dans VBNET.

Vous pouvez voir cette API en action sur ce fichier de script O2 XRule: ascx_View_SourceCode_AST.cs.o2 .

Par exemple, voici comment vous traitez un texte de code source C # et remplissez un certain nombre de TreeViews & amp; Zones de texte:

    public void updateView(string sourceCode)
    {   
        var ast = new Ast_CSharp(sourceCode);
        ast_TreeView.show_Ast(ast);
        types_TreeView.show_List(ast.astDetails.Types, "Text");
        usingDeclarations_TreeView.show_List(ast.astDetails.UsingDeclarations,"Text");
        methods_TreeView.show_List(ast.astDetails.Methods,"Text");
        fields_TreeView.show_List(ast.astDetails.Fields,"Text");
        properties_TreeView.show_List(ast.astDetails.Properties,"Text");
        comments_TreeView.show_List(ast.astDetails.Comments,"Text");

        rewritenCSharpCode_SourceCodeEditor.setDocumentContents(ast.astDetails.CSharpCode, ".cs");
        rewritenVBNet_SourceCodeEditor.setDocumentContents(ast.astDetails.VBNetCode, ".vb");                                
    }

L'exemple de ascx_View_SourceCode_AST.cs.o2 montre également comment vous pouvez utiliser les informations recueillies à partir de l'AST pour sélectionner sur le code source un type, une méthode, un commentaire, etc.

Pour référence, voici le code de l'API écrit (notez qu'il s'agit de mon premier passage à l'utilisation de l'analyseur C # AST de SharpDevelop, et que je ne comprends toujours pas comment cela fonctionne):

Nous avons récemment publié un analyseur syntaxique C # qui gère toutes les fonctionnalités de C # 4.0, ainsi que la nouvelle fonctionnalité async. Analyseur C # et CodeDOM

Cette bibliothèque génère un modèle objet sémantique qui conserve les commentaires et les informations de formatage et peut être modifié et enregistré. Il prend également en charge l’utilisation de requêtes LINQ pour analyser le code source.

SharpDevelop , un EDI open source, est fourni avec un analyseur de code basé sur le visiteur qui fonctionne vraiment bien. Il peut être utilisé indépendamment de l'IDE.

Envisagez d’utiliser la réflexion sur un binaire construit au lieu d’analyser directement le code C #. L’API de réflexion est vraiment facile à utiliser et vous pourrez peut-être obtenir toutes les informations dont vous avez besoin?

Consultez Gold Parser . Il a une interface utilisateur très intuitive qui vous permet de tester votre grammaire de manière interactive et de générer du code C #. Il existe de nombreux exemples et il est totalement gratuit.

Peut-être pourriez-vous essayer avec Irony sur irony.codeplex.com.

C’est très rapide et une grammaire c # existe déjà.

La grammaire elle-même est écrite directement en c # à la manière de BNF (atteinte avec la surcharge de certains opérateurs)

La meilleure chose à ce sujet est que la "grammaire" produit directement l'AST.

Vous devriez absolument consulter Roslyn puisque MS vient d’ouvrir (ou va bientôt ouvrir) le code avec une licence Apache 2 ici . Vous pouvez également rechercher un moyen d'analyser ces informations avec ce code à partir de GitHub .

Nemerle est un élément qui gagne du terrain et qui convient parfaitement à ce travail.

vous pouvez voir comment cela pourrait être résolu dans ces vidéos de NDC:

Pas en C #, mais un analyseur complet C # 2/3/4 qui construit des AST complets est disponible avec notre Boîte à outils de réingénierie des logiciels DMS .

DMS fournit une vaste infrastructure d’analyse, de création d’arborescence, de construction de tables de symboles et d’analyses de flux, de transformation source à source et de régénération du code source à partir des AST (modifiés). (Il gère également de nombreuses langues autres que le C #.)

EDIT (septembre) 2013: Cette réponse n'a pas été mise à jour récemment. DMS a longtemps géré C # 5.0

GPPG peut être utile si vous souhaitez rédiger le vôtre. analyseur (ce qui est amusant).

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