2010-09-02 5 views
2

Je suis à la recherche d'une alternative pour CSharpCodeProvider.Parse. La méthode était supposée analyser une source de code [C#] et renvoyer un objet CompileUnit. Cependant, la méthode n'est implémentée dans aucun framework .Net.Une alternative pour "CSharpCodeProvider.Parse"

Mon but est de pouvoir naviguer dans un C# CodeDOM sans avoir à le compiler. J'écris une application qui fait de l'analyse de code mais je n'ai pas forcément toutes les références externes, ce qui veut dire que je ne peux pas la compiler.

Répondre

2

SharpDevelop (l'IDE open source utilisée pour Mono) a une bibliothèque appelée NRefactory qui vous permet d'analyser le code C# et de le convertir en un AST: http://wiki.sharpdevelop.net/NRefactory.ashx (Extrait de ce lien ci-dessous):

using (IParser parser = ParserFactory.CreateParser(SupportedLanguage.CSharp, new StringReader(sourceCode))) 
{ 
    parser.Parse(); 
    // this allows retrieving comments, preprocessor directives, etc. (stuff that isn't part of the syntax) 
    specials = parser.Lexer.SpecialTracker.RetrieveSpecials(); 
    // this retrieves the root node of the result AST 
    result = parser.CompilationUnit; 
    if (parser.Errors.Count > 0) { 
     MessageBox.Show(parser.Errors.ErrorOutput, "Parse errors"); 
    } 
} 
-1

Notre DMS Software Reengineering Toolkit est un outil pour construire des outils d'analyse pour des langages arbitraires. DMS fournit l'analyse généralisée, la navigation et la modification AST, la régénération de source à partir d'un arbre modifié, la prise en charge des tables de symboles et divers types de support d'analyse ainsi que la possibilité d'écrire des sources directement. syntaxe de surface. Son C# Front End fournit un analyseur C# 4.0 complet (y compris LINQ) qui construit un arbre syntaxique abstrait complet contenant chaque élément du texte source, y compris les commentaires capturés comme des annotations sur les nœuds de l'arborescence source décorés par les commentaires.

0

Actual (2017-2018) info:

  1. Plus d'informations disponibles sur https://github.com/icsharpcode/SharpDevelop/wiki/NRefactory

  2. Télécharger paquet NuGet: "ICSharpCode.NRefactory"

  3. Et voici l'extrait de code:

    using ICSharpCode.NRefactory.CSharp; 
    using System; 
    using System.Collections.Generic; 
    using System.IO; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    namespace Ns1 
    { 
        public class Foo 
        { 
         public void Go() 
         {  
          CSharpParser parser = new CSharpParser(); 
          string text = File.ReadAllText("myProgram.cs"); 
          SyntaxTree syntaxTree = parser.Parse(text); 
         } 
        } 
    }