remarks para cref c# parsing

para - remarks c#



Analizador para C# (15)

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

Puedes ver cómo podría solucionarlo en estos videos de NDC:

¿Qué analizadores están disponibles para analizar el código C #?

Estoy buscando un analizador C # que pueda usarse en C # y me dé acceso a información de líneas y archivos sobre cada artefacto del código analizado.


Considere utilizar 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 quizás puedas obtener toda la información que necesitas.


Debería echar un vistazo a Roslyn desde que MS acaba de abrir (o abrirá pronto) el código con una licencia Apache 2 here . También puede consultar una forma de analizar esta información con este código de GitHub .


Eche un vistazo a Gold Parser . Tiene una IU muy intuitiva que le permite probar de forma interactiva su gramática y generar código C #. Hay muchos ejemplos disponibles con él y es completamente gratis.


Funciona en el código fuente:

Trabaja en ensamblaje:

El problema con el "análisis sintáctico" 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 .


Implementé exactamente lo que estás preguntando (código de AST Parsing of C #) en el proyecto OWASP O2 Platform utilizando las API AST de SharpDevelop.

Para que sea más fácil de consumir, escribí una API rápida que expone una cantidad de elementos claves del código fuente (usando declaraciones, tipos, métodos, propiedades, campos, comentarios) y puedo reescribir el código C # original en C # y en VBNET .

Puede ver esta API en acción en este archivo de script de O2 XRule: ascx_View_SourceCode_AST.cs.o2 .

Por ejemplo, esta es la forma en que procesa un texto de código fuente de C # y rellena varias 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 de 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.

A modo de referencia, aquí está el código de la API que escribió (tenga en cuenta que esta es mi primera vez al usar el analizador C # AST de SharpDevelop, y todavía estoy entendiendo cómo funciona):


No en C #, pero un analizador de C # 2/3/4 completo 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 sintáctico, 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 del código fuente de los AST (modificados). (También maneja muchos otros lenguajes aparte de C #).

EDIT (septiembre) 2013: esta respuesta no ha sido actualizada recientemente. DMS ha manejado por mucho tiempo C # 5.0


Recientemente hemos lanzado un analizador C # que maneja todas las características de C # 4.0 más la nueva función de sincronización : analizador C # y CodeDOM

Esta biblioteca genera un modelo de objeto semántico que conserva los comentarios y la información de formato y puede modificarse y guardarse. También es compatible con el uso de consultas LINQ para analizar el código fuente.




Tal vez podrías probar con Irony en ironon.codeplex.com.

Es muy rápido y la gramática AC # ya existe.

La gramática en sí está escrita directamente en c # de forma similar a BNF (se logra con algunas sobrecargas de operadores)

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


GPPG puede ser de utilidad, si está dispuesto a escribir su propio analizador (que es divertido).



SharpDevelop , un IDE de código abierto, viene con un analizador de código basado en visitantes que funciona muy bien. Se puede usar independientemente del IDE.


Mono (fuente abierta) incluye el compilador de C # (y, por supuesto, el analizador sintáctico)