Pregunta

Que los analizadores están disponibles para el análisis de código de C#?

Estoy buscando un C# analizador que puede ser utilizado en C# y me da acceso a la línea y el archivo de información acerca de cada artefacto de los analizados código.

¿Fue útil?

Solución

Obras en el código fuente:

Obras en la asamblea:

El problema con el montaje "análisis" es que tenemos menos información acerca de la línea y el archivo (la información se basa en .archivo pdb, y el Ap contiene líneas de información sólo para los métodos)

Yo personnaly recomendar Mono.Cecil y NRefactory.

Otros consejos

Mono (open source) incluye el compilador de C# (y, por supuesto, analizador)

Si vas a compilar C# v3.5 a .net asambleas:

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

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

Si estás familiarizado con ANTLR, puede utilizar Antlr C# gramática.

He implementado justo lo que están haciendo (AST Análisis de código de C#) en el OWASP O2 Plataforma proyecto con SharpDevelop AST Api.

Con el fin de hacer más fácil para consumir escribí una rápida API que expone un número de clave de la fuente de elementos de código (instrucciones de uso, tipos, métodos, propiedades, campos, comentarios) y es capaz de reescribir el original de código de C# en C# y en VBNET.

Usted puede ver esta API en acción en esta O2 XRule archivo de secuencia de comandos: ascx_View_SourceCode_AST.cs.o2 .

Por ejemplo, esta es la forma de procesar un código fuente de C# de texto y rellenar un número de TreeViews & cuadros de texto:

    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 se puede usar la información recopilada de la AST a seleccionar en el código fuente de un tipo, método, comentario, etc..

Para referencia aquí es el código de la API que escribió (tenga en cuenta que este es mi primer paso en el uso de SharpDevelop C# AST analizador, y yo todavía estoy recibiendo mi cabeza en torno a cómo funciona):

Recientemente hemos publicado un C# analizador que se encarga de todos los C# 4.0 características, además de la nueva característica de async: C# Analizador y CodeDOM

Esta biblioteca genera una semántica del modelo de objetos que conserva los comentarios y la información de formato y puede ser modificado y guardado.También admite el uso de consultas LINQ para analizar el código fuente.

SharpDevelop, un IDE de código abierto, viene con un visitante de un código basado en el analizador que funciona realmente bien.Puede ser utilizado independientemente de la IDE.

Considere la posibilidad de utilizar la reflexión sobre un binario compilado en vez de analizar el código de C# directamente.La reflexión de la API es realmente fácil de usar y tal vez usted puede obtener toda la información que necesita?

Eche un vistazo a Gold Parser.Tiene una forma muy intuitiva de IU que le permite de forma interactiva prueba de su gramática y generar código C#.Hay un montón de ejemplos disponibles con ella y es totalmente gratuito.

Tal vez usted podría tratar con Ironía en irony.codeplex.com.

Es muy rápido y un c# gramática ya existe.

La gramática en sí está escrito directamente en c# en un BNF como la forma de (alcanza con algunos operadores sobrecargas)

Lo mejor es que la "gramática" produce la AST directamente.

Definitivamente, usted debe comprobar fuera de Roslyn desde que microsoft acaba de abrir (o pronto lo estará abierto) el código con una licencia Apache 2 aquí.También puede retirar una forma de analizar esta información con este código de GitHub.

Algo que está ganando impulso, y muy apropiado para el trabajo es Nemerle

usted puede ver cómo se podría resolver en estos videos de NDC :

No en C#, pero un completo C# 2/3/4 analizador que construye completo Ast está disponible con nuestro Software DMS kit de herramientas de Reingeniería.

DMS ofrece una amplia infraestructura para el análisis, el árbol de la construcción, la construcción de tablas de símbolos y análisis de flujo, fuente a fuente de transformación y regeneración de código fuente a partir de la (modificado) ASTs.(También se ocupa de muchos otros idiomas que sólo C#.)

EDICIÓN (septiembre) 2013:Esta respuesta no ha sido actualizado recientemente.DMS siempre ha manejado C# 5.0

GPPG podría ser de utilidad, si usted está dispuesto a escribir su propio parser (que es muy divertido).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top