¿Qué analizadores están disponibles para analizar el código C #?
Estoy buscando un analizador de C # que se pueda usar en C # y que me dé acceso a información de línea y archivo sobre cada artefacto del código analizado.
¿Qué analizadores están disponibles para analizar el código C #?
Estoy buscando un analizador de C # que se pueda usar en C # y que me dé acceso a información de línea y archivo sobre cada artefacto del código analizado.
Respuestas:
Funciona en código fuente:
Funciona en montaje:
El problema con el "análisis" del ensamblaje es que tenemos menos información sobre la línea y el archivo (la información se basa en el archivo .pdb y Pdb contiene información de líneas solo para los métodos)
Personalmente recomiendo Mono.Cecil y NRefactory .
Si va a compilar C # v3.5 en ensamblados .net:
var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx
CodeDomProvider.Parse()
método.
Si está familiarizado con ANTLR, puede usar la gramática de Antlr C # .
Implementé justo lo que está pidiendo (análisis AST del código C #) en el proyecto de la plataforma OWASP O2 utilizando las API de SharpDevelop AST.
Para facilitar el consumo, escribí una API rápida que expone una serie de elementos clave del código fuente (usando declaraciones, tipos, métodos, propiedades, campos, comentarios) y es capaz de reescribir el código C # original en C # y en VBNET. .
Puede ver esta API en acción en este archivo de script O2 XRule: ascx_View_SourceCode_AST.cs.o2 .
Por ejemplo, así es como procesa un texto de código fuente C # y completa una serie de TreeViews y TextBoxes:
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");
}
El ejemplo en ascx_View_SourceCode_AST.cs.o2 también muestra cómo puede usar la información recopilada del AST para seleccionar en el código fuente un tipo, método, comentario, etc.
Como referencia, aquí está el código API que escribí (tenga en cuenta que este es mi primer paso al usar el analizador C # AST de SharpDevelop, y todavía estoy entendiendo cómo funciona):
Recientemente hemos lanzado un analizador de C # que maneja todas las características de C # 4.0 más la nueva característica asíncrona: analizador de C # y CodeDOM
Esta biblioteca genera un modelo de objeto semántico que retiene los comentarios y la información de formato y se puede modificar y guardar. También admite el uso de consultas LINQ para analizar el código fuente.
SharpDevelop , un IDE de código abierto, viene con un analizador de código basado en visitantes que funciona muy bien. Se puede utilizar independientemente del IDE.
Considere usar la reflexión en un binario construido en lugar de analizar el código C # directamente. La API de reflexión es realmente fácil de usar y tal vez pueda obtener toda la información que necesita.
Eche un vistazo a Gold Parser . Tiene una IU muy intuitiva que le permite probar interactivamente su gramática y generar código C #. Hay muchos ejemplos disponibles con él y es completamente gratuito.
Quizás puedas probar con Irony en irony.codeplex.com.
Es muy rápido y la gramática ac # ya existe.
La gramática en sí está escrita directamente en c # en una forma similar a BNF (lograda con algunas sobrecargas de operadores)
Lo mejor de todo es que la "gramática" produce el AST directamente.
Algo que está cobrando impulso y muy apropiado para el trabajo es Nemerle
puedes ver cómo podría solucionarlo en estos videos de NDC:
No en C #, pero un analizador completo de C # 2/3/4 que crea AST completos está disponible con nuestro kit de herramientas de reingeniería de software DMS .
DMS proporciona una amplia infraestructura para el análisis, la construcción de árboles, la construcción de tablas de símbolos y análisis de flujo, la transformación de fuente a fuente y la regeneración de código fuente a partir de los AST (modificados). (También maneja muchos otros lenguajes además de C #).
EDITAR (septiembre) 2013: esta respuesta no se ha actualizado recientemente. DMS ha manejado durante mucho tiempo C # 5.0