Pregunta

Estoy trabajando en un proyecto escolar de ingeniería inversa, que requiere traducir manipular AST del proyecto C # compilado. He visto la publicación en "Traducir código C # a AST?" en este sitio web, pero no se parece al que estoy buscando.

Según lo que sé, actualmente C # no proporciona una clase de biblioteca que haga algo así para Java: http://help.eclipse.org/help33/index .jsp? topic = / org.eclipse.cdt.doc.isv / reference / api / org / eclipse / cdt / core / dom / ast / ASTVisitor.html . Si existe tal clase de biblioteca en C #, todo aquí está resuelto.

He consultado con alguien, y aquí están las posibles soluciones. Pero también tengo problemas para resolver las soluciones:

  1. Busque otro compilador que proporcione una biblioteca que permita exponer su AST para su manipulación. Pero no puedo encontrar un compilador como ese.
  2. Usar ANTLR Parser Generator para crear mi propio compilador que lo hace (será un proceso mucho más difícil y más largo). La descarga allí proporciona ejemplos de gramáticas para diferentes lenguajes pero no C # (tiene gramáticas escritas en varios idiomas, incluido C # pero no para producir gramática C #). Por lo tanto, el problema es que no puedo encontrar la gramática de C #.

¿Cuál es la forma más corta y rápida de abordar este problema? Si realmente tengo que tomar una de las alternativas anteriores, ¿cómo debo resolver los problemas que enfrenté?

¿Fue útil?

Solución 3

ANTLR no es una buena opción. Ahora estoy probando usar Mono Cecil en su lugar. Mono Cecil es bueno para analizar cualquier código de fuente que pueda compilarse en Common Intermediate Language (CIL). La desventaja es que no tiene la documentación adecuada.

Otros consejos

Sé que la respuesta a esta fue aceptada hace mucho tiempo. Pero tenía una pregunta similar y no estaba seguro de las opciones disponibles. Investigué un poco la biblioteca NRefactory que se incluye como parte de SharpDevelop. genera un AST a partir del código C #.

Aquí hay una imagen de la aplicación de demostración NRefactory que forma parte del código fuente SD. Escriba un código C # y genera y muestra el AST en una vista de árbol.

texto alternativo ??

¿Por qué no prueba NRefectory . Lo he visto discutido para AST en algunos foros de SharepDevelop .

Aquí hay un artículo sobre CodeProject con respecto a este tema.

Acabo de responder en otro hilo aquí en StackOverflow, una solución donde implementé una API para crear y manipular AST desde el código fuente de C #

Un analizador completo de C # 3.0 está disponible con nuestro DMS Software Reengineering Toolkit (DMS para abreviar). Se ha utilizado para procesar decenas de miles de archivos C # con precisión. Proporciona construcción AST automatizada, recorridos de árboles, coincidencia y transformación de patrones de sintaxis de superficie y mucho más. Como producto comercial, podría no funcionar para un proyecto de estudiante.

ANTLR posiblemente ofrece un analizador C #, pero no sé si es completo o robusto, o si realmente construye AST.

[EDITAR el 25 de enero de 2010: el analizador C # 4.0 ahora está disponible para DMS con todas las propiedades anteriores]

[EDITAR mayo de 2016: analizador C # 6.0 disponible para DMS.]

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