2009-08-27 10 views
6

Necesito un analizador o gramática para C# 3.0 (licencia de código abierto). ¿Cuál es la mejor opción hoy?¿El mejor analizador para C#?

+0

Sólo por curiosidad .. ¿por qué quiere uno? – RCIX

+0

Experimentando con transformaciones de código. – skevar7

+0

Si usa Visual Studio SDK, puede obtener un modelo de objeto de documento completo del proyecto C# para realizar dichas transformaciones. VS ya lo usa para refractar e intellisense y muchos complementos también lo usan. –

Respuesta

3

Salida Metaspec's C# parser:

El Metaspec C# analizador es totalmente compatible con ECMA-334 y estándares ECMA-335. Además, admite extensiones específicas de Microsoft. Para detalles sobre la biblioteca del analizador C#, , consulte la documentación en línea (C# edition o C++ edition).

C# 3.0 características soportadas:

algoritmo de inferencia
  • variables locales implícitamente mecanografiadas tipo
    • nuevo C# 3.0
    • inicializadores de objeto
    • inicializadores de colección
    • creación de objetos anónimos expresiones
    • lambda expresiones
    • tipos anónimos
    • métodos de extensión
    • consulta expresiones
    • métodos parciales

    C# 2.0 Características compatibles:

    • genéricos
    • tipos anulables
    • métodos anónimos
  • +0

    ¿Es * fuente abierta *? – skevar7

    +0

    No estoy seguro, deberá ponerse en contacto con Metaspec para obtener una copia de su licencia. –

    0

    Depende de lo que está en optimzing.

    Si está optimizando la capacidad de transformar C#, consulte el C# Front End para un analizador que maneja C# 1.2, 2.0 y 3.0 (incluida la sintaxis LINQ). El front-end C# se construye sobre DMS Software Reengineering Toolkit que proporciona el análisis sintáctico, construcción automática de AST, soporte para tablas de símbolos, transformación de fuente a fuente utilizando sintaxis de nivel de fuente con patrones, y AST vuelve a la impresión de texto fuente. Si está buscando transformar el código C#, esta es la herramienta para hacerlo. (DMS también se usa para analizar y transformar código en Java, C, C++, JavaScript, COBOL y muchos otros lenguajes).

    Si está optimizando en código abierto, esta no es la herramienta que desea.

    1

    Recomiendo al menos mirar el proyecto LINQOverC# alojado en codeproject.com.

    URL: http://www.codeplex.com/LinqOverCSharp

    Hay algunos (menor de edad?) problemas conocidos, y no se ha actualizado desde enero de 2008 (que podría ser un problema bastante grande), pero el código fuente de un analizador C# 3.0 (rápido y 100% .Net) está ahí para tomar.

    Mis cosas favoritas de este programa de análisis:

    1. Se puede cargar un archivo de proyecto de Visual Studio (csproj) más o menos fuera de la caja, y analiza todo el asunto (incluyendo referencias de ensamblado).

    2. Puede consultar, enumerar, filtrar, etc., el modelo de objetos analizados (árbol) utilizando LINQ. Lo cual hace que sea casi trivial recorrer arriba y abajo y todo lo que está analizando.

    He aquí una muestra de consulta LINQ para encontrar una variable o parámetro de un método, donde el nombre de la variable = variable:

    variable = (from v in method.Variables 
              where string.Compare(v.Name, VariableName, false) == 0 
              select v as LanguageElement).Union(
               from p in method.FormalParameters 
               where string.Compare(p.Name, VariableName, false) == 0 
               select p as LanguageElement).FirstOrDefault();