2009-11-27 9 views
8

estoy buscando un programa de análisis de C. Esto es lo que necesito:recursiva Descenso Analizador de C

  1. escrito en C (no C++).
  2. Manuscrito (no generado).
  3. BSD o licencia similarmente permisiva.
  4. Capaz de analizarse no trivialmente (puede ser un subconjunto de C).

Puede ser parte de un proyecto, siempre que esté desacoplado para que pueda extraer el analizador.

¿Hay un analizador existente que cumpla con estos requisitos?

+0

¿Por qué te importa cómo se construye el analizador? Más importante aún, si está trabajando con un subconjunto arbitrario de C, ¿por qué querría un analizador más difícil de modificar ("escrito a mano") que uno generado a partir de un documento de especificación en el que la gramática se delineó con precisión? –

+0

Y para ser pedante, ¿cómo * pequeño * un subconjunto de C? Técnicamente, el lenguaje vacío puede analizarse a sí mismo: -} –

+0

@Ira Me importa porque lo estoy usando como punto de inicio de arranque para un lenguaje específico de dominio tipo C. No siempre será C, así que si lo genero eventualmente tendré que lidiar con el código generado a mano. – Imagist

Respuesta

-1

GCC tiene una en gcc/c-parser.c.

+1

Eso realmente no llena los requisitos de licencia. Solo digo. –

-1

Compruebe elsa, utiliza el algoritmo LR generalizado.

Su uso principal es para C++, pero también analiza el código C.

comprobar su page, en la sección llamada "¿Cuánto C puede analizar Elsa?" que dice que puede analizar la mayoría de los programas C, incluido el kernel de Linux.

Se lanzó bajo licencia de BSD.

+0

Elsa no está completamente escrita a mano; usa Elkhound como generador de analizadores. El principal archivo de gramática es un archivo .gr que se pasa a través de Elkhound para generar un analizador – blwy10

1

Usted podría intentar TCC. Está licenciado bajo Lesser GPL.

7

Si usted no necesita C99, entonces lcc es un slam dunk:

  • Está documentado en un libro muy claro, bien escrito.
  • Las técnicas utilizadas para el análisis recursivo-descendente de operadores con precedencia están bien documentadas en un artículo y un informe técnico de Dave Hanson.
  • Claro, código ANSI C manuscrito.

Una desventaja potencial es que el analizador lcc no construye un árbol de sintaxis abstracta — que va directamente a partir de análisis de código intermedio.

Si usted debe tener C99 entonces creo tinycc (TCC) es su mejor apuesta.

0

Parece que nwcc coincide suficientemente con sus necesidades.

Cuestiones relacionadas