Domanda

Quale il parser sono disponibili per l'analisi di codice C#?

Sto cercando un programma in C# parser che può essere utilizzato in C# e mi danno accesso alla linea e file di informazioni su ogni manufatto di analizzare il codice.

È stato utile?

Soluzione

Opere di codice sorgente:

Lavori in assemblea:

Il problema con il montaggio "analisi" è che abbiamo meno informazioni su linea e i file (le informazioni si basa su .file pdb, e Pdb contiene le linee di informazioni solo per i metodi)

Ho personnaly consiglia Mono.Cecil e NRefactory.

Altri suggerimenti

Mono (open source) include il compilatore C# (e, naturalmente, parser)

Se avete intenzione di compilazione C# v3.5 .net assembly:

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

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

Se hai familiarità con ANTLR, è possibile utilizzare Antlr C# grammatica.

Ho implementato solo quello che si stanno chiedendo (AST di Analisi di codice C#) al OWASP O2 Piattaforma progetto utilizzando SharpDevelop AST Api.

Al fine di rendere più facile consumare che ho scritto una rapida API che espone un certo numero di elementi del codice sorgente (utilizzando le istruzioni, tipi, metodi, proprietà, campi, commenti) ed è in grado di riscrivere l'originale codice C# in C# e VBNET.

Si può vedere questa API in azione su questa O2 XRule file di script: ascx_View_SourceCode_AST.cs.o2 .

Per esempio, questo è come si elabora un codice sorgente C# testo e compilare un numero di Strutture & Caselle di testo:

    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'esempio ascx_View_SourceCode_AST.cs.o2 inoltre illustrato come è possibile utilizzare le informazioni raccolte dall'AST per selezionare il codice sorgente di un tipo di metodo, commento, ecc..

Per il riferimento qui è il codice di API che ha scritto (nota che questo è il mio primo passaggio all'utilizzo di SharpDevelop C# AST parser, e sono ancora ottenere la mia testa intorno come funziona):

Abbiamo recentemente rilasciato un C# parser che gestisce tutto il C# 4.0 caratteristiche e le nuove funzionalità async: C# Parser e CodeDOM

Questa libreria genera una semantica del modello di oggetto che conserva i commenti e le informazioni di formattazione e può essere modificato e salvato.Esso supporta anche l'utilizzo di query LINQ per analizzare il codice sorgente.

SharpDevelop, open source), IDE, viene fornito con un ospite a base di codice parser che funziona davvero bene.Può essere utilizzato indipendentemente dall'IDE.

Considerare l'uso di una riflessione sul binario invece di analizzare il codice C# direttamente.La riflessione API è davvero facile da usare e, forse, è possibile ottenere tutte le informazioni di cui hai bisogno?

Guarda Oro Parser.È molto intuitivo UI che permette di verificare in modo interattivo la grammatica e generare codice C#.Ci sono un sacco di esempi disponibili con essa, ed è completamente gratuito.

Forse si potrebbe provare con Ironia irony.codeplex.com.

E ' molto veloce e un c# grammatica esiste già.

La grammatica stesso è scritto direttamente in c# in un BNF come modo (ottenuti con alcuni operatori sovraccarichi)

La cosa migliore è che la "grammatica" produce l'AST direttamente.

Si dovrebbe verificare Roslyn dal MS appena aperto (o sarà presto aperto) il codice con una licenza Apache 2 qui.È anche possibile controllare un modo per analizzare questa info con questo codice GitHub.

Qualcosa che sta guadagnando slancio e molto appropriato per il lavoro Nemerle

si può vedere come è potuto risolvere in questi video da NDC :

Non in C#, ma un C# 2/3/4 parser che costruisce pieno ASTs è disponibile con il nostro DMS Software Reengineering Toolkit.

DMS offre una vasta infrastruttura per l'analisi, albero, edificio, costruzione di tabelle di simboli e l'analisi dei flussi di, origine e fonte di trasformazione e rigenerazione del codice sorgente dal (modificato) Ass.(Si occupa anche di molte altre lingue che solo il C#.)

EDIT (settembre) 2013:Questa risposta non è stata aggiornata di recente.DMS è lungo gestito C# 5.0

GPPG potrebbe essere utile, se si è disposti a scrivere il proprio parser (il che è divertente).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top