2009-10-01 21 views

Respuesta

18

He tenido una buena experiencia con ANTLR v3. Con mucho, el mayor beneficio es que le permite escribir analizadores LL (*) con una visión infinita: estos pueden ser bastante subóptimos, pero la gramática se puede escribir de la manera más directa y natural sin necesidad de refactorizar para trabajar con las limitaciones del analizador. y el rendimiento del analizador a menudo no es un gran problema (espero que no estés escribiendo un compilador de C++), especialmente en proyectos de aprendizaje.

También proporciona medios muy buenos para construir significativos ASTs sin necesidad de escribir ningún código: para cada producción de gramática, indica el token o subproducción "crucial" y se convierte en un nodo de árbol. O puede escribir una producción arbórea.

Tener un vistazo a las siguientes gramáticas ANTLR (que se enumeran aquí en orden de complejidad creciente) para obtener una esencia de cómo se ve y se siente

+0

¡Gracias! Buena sugerencia – Nestor

+0

Gracias de nuevo Pavel. Punteros muy útiles. – Nestor

1

Puede estudiar el código fuente para Mono C# compiler.

+0

Gracias. No estoy intentando escribir un analizador sintáctico para C#, sino un analizador sintáctico para mi propio idioma, el analizador está escrito en C#. Muchas gracias por su sugerencia. – Nestor

1

Mientras todavía está en beta temprana el Oslo Lenguaje de modelado y herramientas de MGrammar de Micro suaves están mostrando algunas promesas.

+0

Sí. Lo he visto. Me gusta el editor (ajustando el resaltado de sintaxis a mi gramática). Pero es un poco temprano para usarlo ... parece. – Nestor

+1

@Nestor - Estoy de acuerdo en que es demasiado pronto para usarlo, pero pensé que merecía una mención. –

+0

+1 para su comentario. Es verdad.Usaría Oslo si estuviera en su versión final. – Nestor

11

He jugado con Irony. Parece simple y útil.

+1

Un aspecto agradable (al menos eso pensé) de Irony es que puedes escribir tu gramática en un lenguaje como C# – saret

1

También me gustaría echar un vistazo a SableCC. Es muy fácil crear la gramática EBNF. Here es un simple ejemplo de calculadora C#.

0

Lex y yacc siguen siendo mis favoritos. Poco claro si recién está comenzando, pero extremadamente simple, rápido y fácil una vez que haya bajado el lingo.

Puede hacer que haga lo que quiera; generar código C#, construir otras gramáticas, emular instrucciones, lo que sea.

No es bonito, es un formato basado en texto y LL1, por lo que su sintaxis tiene que acomodar eso.

En el lado positivo, está en todas partes. Hay excelentes libros de O'reilly al respecto, muchos ejemplos de códigos, muchas gramáticas prefabricadas y muchas bibliotecas de idiomas nativos.

1

Hay un breve artículo here sobre la construcción de un analizador LL (1), por supuesto, también podría usar un generador.

Cuestiones relacionadas