2009-03-30 10 views
7

¿Qué generador lexer/analizador es el mejor (el más fácil de usar, el más rápido) para C o C++? Estoy usando flex y bison en este momento, pero bison solo maneja gramáticas LALR (1). El lenguaje que estoy analizando no es realmente necesita búsqueda ilimitada, pero la búsqueda ilimitada haría mucho más fácil el análisis de . ¿Debería probar Antlr? Coco/R? ¿Elkhound? ¿Algo más?Herramientas Lexer/analizador

+1

¿Qué quiere decir con "mejor"? Necesitas hacer tu pregunta más específica. –

+1

¿Cuáles son sus requisitos? ¿LALR (1) no es suficiente para usted y, de ser así, de qué manera? –

+0

Respondo la pregunta de Brian. ¿Qué necesitas para poder hacer? ¿Cómo es LALR (1) insuficiente? –

Respuesta

5

Actualizado 01/05/2015:

Mi respuesta original apuntando a una pregunta ahora eliminado:

Hay un montón de buenas respuestas a esta pregunta ya en What parser generator do you recommend

Así que he tomado la lista de elementos del deleted answer on archive.org con al menos 1 voto aquí:

He hecho varios sistemas de flexión/bisonte yo mismo pero ahora reemplazaría ambos con Lemon de sqlite ya que es una herramienta, reentrante e hilo seguro, además de tener un modelo de transmisión/extracción.

+0

Limón se ve muy bien, y he podido reducir la gramática a LALR (1), por lo que podría usarlo. – Zifre

+1

Los programadores de stackoverflow necesitan una verificación en su sistema antes de eliminar las preguntas para asegurarse de que nadie haga referencia a ellas. ¿Recuerdas cuáles fueron algunas de las sugerencias? –

+0

Acepto, esta respuesta es ahora completamente inútil – paulm

0

No sé lo que busca exactamente, pero creo que Boost Xpressive la pena mirar ...

no es exactamente un generador de análisis, pero una gran herramienta para manejar gramáticas y lo siento puede manejar los extraños.

0

He estado utilizando el sistema de análisis GOLD (http://www.devincook.com/goldparser) con muy buenos resultados. Mi proyecto es pequeño, un sistema de análisis para archivos NC en C. Pero creo que la herramienta también puede manejar proyectos más complejos.

+1

GOLD no parece funcionar en Linux. – Zifre

+0

Goldparser es bueno pero es extremadamente lento. Incluso en el código C++ optimizado para la velocidad, se necesitan 10 segundos para analizar 15000 líneas de código. Si compara esto con la velocidad del analizador de PHP, esto es extremadamente lento. – Elmue

3

La mala noticia es que la mayoría de los lenguajes de computadora reales no son "LALR (1)", lo que significa que debe recurrir a hackers considerables para hacer que YACC analice lenguajes reales.

Si está diseñando un DSL, puede usar cualquiera de los generadores del analizador LALR sin muchos problemas precisamente porque puede cambiar la gramática de su DSL cuando el generador del analizador grazna. Los generadores de analizadores de LL trabajan principalmente aquí también por la misma razón, pero la falta de recursividad a la izquierda puede ser un verdadero dolor.

Si no está familiarizado con la forma en que le gusta su sintaxis, los analizadores GLR son ganadores indiscutibles. Los usamos en el DMS Software Reengineering Toolkit y hemos desarrollado analizadores de calidad de producción para más de 30 idiomas, incluido C++, que tiene un teorema popular que dice que es casi imposible de analizar. El teorema folk fue iniciado por personas que usaban analizadores LL y LALR para tratar de manejar C++. GLR lo hace fácilmente.

0

El último bisonte afirma hacer un análisis de búsqueda ilimitado, al (en efecto) hacer varios análisis al mismo tiempo. Si ya tiene una inversión en bisontes, puede valer la pena probar esto, en lugar de cambiar a otro paquete.

http://www.gnu.org/software/bison/manual/bison.html#GLR-Parsers

No he utilizado esta característica a mí mismo, sin embargo.

En cuanto a otros sistemas, he usado ANTLR. No me gustó particularmente (la documentación no era muy buena, y uno debe factorizar manualmente la gramática de uno para atender la precedencia del operador), pero funcionó, y muchos juran que vale la pena mirarla.

+0

Probé el análisis de Bison GLR, pero parece causar algunos problemas con la precedencia del operador y es notablemente más lento. ANTLR es difícil de usar con C++ y prefiero LR sobre las gramáticas de estilo LL. – Zifre

1

ANTLR hace que la búsqueda ilimitada sea muy fácil usando la opción 'retroceder'. También podría calificar sus criterios más fáciles de usar, más rápidos ya que tiene ANTLRWORKS que le permite visualizar y depurar su gramática.

Otra ventaja es que hace que la construcción de AST sea trivialmente fácil con su soporte integrado para construir AST que falta en el bisonte.

Con dos libros publicados - 'ANTLR: guía definitiva' y 'Patrones de diseño del lenguaje', es una de las herramientas muy bien documentadas disponibles. También tienes una lista de correo muy activa.

0

LRSTAR 6.4 puede hacer el análisis LR (k). Es un sistema basado en C++, amigable para Windows y Visual Studio. Crea analizadores sintácticos similares a Bison. También crea lexers basados ​​en tabla similares a "flex" y lectores de código directo similares a "re2c". La velocidad del código generado es aproximadamente el doble de la velocidad de creación de "bison" y "flex".

Puede modificar el archivo del analizador esquelético y LRSTAR generará el código de la forma que desee o puede volver a escribir el archivo esqueleto en otro idioma, como C#.

Los analizadores LRSTAR pueden construir un AST automáticamente. Es una licencia BSD de código abierto. Las personas lo están utilizando en los sistemas UNIX/Linux y MAC OS después de volver a compilar con GCC.