¿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.
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 .
Mono (código abierto) incluye el compilador C # (y por supuesto el analizador)
fuente
Si va a compilar C # v3.5 en ensamblados .net:
http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx
fuente
CodeDomProvider.Parse()
método.Si está familiarizado con ANTLR, puede usar la gramática de Antlr C # .
fuente
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:
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):
fuente
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.
fuente
http://www.codeplex.com/csparser
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.
fuente
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.
fuente
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.
fuente
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.
fuente
Definitivamente debería revisar Roslyn ya que MS acaba de abrir (o abrirá pronto) el código con una licencia de Apache 2 aquí . También puede consultar una forma de analizar esta información con este código de GitHub .
fuente
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:
fuente
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
fuente
GPPG podría ser de utilidad si está dispuesto a escribir su propio analizador (lo cual es divertido).
fuente