2010-10-24 19 views
9

Estoy investigando formas, herramientas y técnicas para analizar archivos de código con el fin de admitir el resaltado de sintaxis y la inteligibilidad en un editor escrito en C#.Análisis de código C#

¿Alguien tiene alguna idea/patrones & prácticas/herramientas/técnicas para eso.

EDIT: Una buena fuente de información para cualquier persona interesada:

de análisis más allá de las gramáticas libres de contexto ISBN 978-3-642-14845-3

+0

posible duplicado de [Analizador de C# ] (http://stackoverflow.com/questions/81406/parser-for-c) – Gabe

+1

¿Estás tratando de analizar C# o escribir un analizador en C#? – Gabe

+1

@Gabe, ambos. Estoy tratando de escribir un analizador sintáctico en C# que analizará xml, C# con suerte algo más :) – sTodorov

Respuesta

3

Hay dos aproaches básicos:
1) Analice la solución completa y todo lo que hace referencia para que comprenda todos los tipos implicados en el código
2) Analice localmente y haga lo posible para adivinar qué tipos son.

El problema con (2) es que tienes que adivinar y, en algunas circunstancias, no puedes distinguir exactamente de qué parte es un fragmento de código. Pero si está satisfecho con el tipo de resaltado de sintaxis que se muestra en (por ejemplo, Stack Overflow), este enfoque es fácil y bastante efectivo.

hacer (1), entonces usted tiene que hacer uno de (en orden decreciente de dificultad):

  • Analizar todo el código fuente. No es posible si hace referencia a asambleas de terceros.
  • Utilice la reflexión sobre el código compilado para reunir la información de tipo que puede utilizar al analizar la fuente.
  • Usar el anfitrión del IDE (si disponible, - por lo que no es aplicable en su caso) interfaces de elementos de código para proporcionar la información que necesita
+1

OP quiere analizar múltiples idiomas. Existe el problema "pequeño" de obtener gramáticas en funcionamiento para los idiomas que desea procesar. Los idiomas heredados son difíciles de hacer porque los comités de estándares los han estado decorando con goo; echa un vistazo a IBM Enterprise COBOL o Fortran 2005. Los lenguajes modernos son un poco más fáciles, pero incluso ellos tienen presión para agregar cosas; intente analizar VB.net moderno. Tengo 15 años para construir analizadores usando una estructura unificada para una amplia gama de idiomas (incluidos los que mencioné) y aún no he terminado: - { –

+1

@Ira: OP no deja muy claro qué idiomas son requerido, pero la mayor parte de mi respuesta es igualmente válida para cualquier idioma. Pero tienes razón, es un problema no muy trivial. Visual Studio Intellisense ha sido desarrollado durante muchos años por un equipo experimentado, y solo realmente funciona bien en lenguajes .NET, más allá del resaltado de sintaxis básica, el soporte es bastante pobre en la mayoría de los otros idiomas, lo que es un buen indicador de la dificultad del problema el OP está intentando dirigirse. –

+0

@Ira, la hazaña que intentas lograr suena muy serio. Te deseo todo el éxito con eso. Sin embargo, lo que estoy investigando es principalmente soporte para C#, Ruby, Python, VB. net, java. Solo puedo imaginar las dificultades relacionadas con el análisis de lenguajes heredados – sTodorov

6

Mi analizador favorito para C# es Ironía: http://irony.codeplex.com/ - lo he usado un par de veces con gran éxito

que aquí hay una página de Wikipedia lista muchos más: http://en.wikipedia.org/wiki/Compiler-compiler

+0

¿Irony admite el análisis de múltiples idiomas? – sTodorov

+0

Irony es para crear analizadores sintácticos, así que sí: analiza todo lo que pueda crear una gramática para –

Cuestiones relacionadas