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.
Soluzione
Opere di codice sorgente:
- CSParser:Da C# 1.0 a 2.0, open-source
- Metaspec C# Parser:Da C# 1.0 a 3.0, prodotto commerciale (circa 5000$)
- #riconoscere!:Da C# 1.0 a 3.0, prodotto commerciale (circa 900€) (risposta da SharpRecognize)
- SharpDevelop Parser (risposta da Akselsson)
- NRefactory:Da C# 1.0 a 4.0 (+async), open-source, il parser utilizzato in SharpDevelop.Include l'analisi semantica.
- C# Parser e CodeDOM:Completo di C# 4.0 Parser, già in grado di supportare il C# 5.0 funzionalità async.Prodotto commerciale (49$ a 299$) (risposta da Ken Beckett)
- Microsoft Roslyn CTP:Compilatore come un servizio.
Lavori in assemblea:
- Sistema.Riflessione
- Microsoft Common Infrastruttura Compilatore:Da C# 1.0 a 3.0, Microsoft Public License.Utilizzato da Fxcop e Spec#
- Mono.Cecil:Da C# 1.0 a 3.0, open-source
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.
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).