¿Cuál es la mejor manera de crear un analizador en C# para analizar mi propio idioma? Idealmente, me gustaría proporcionar una gramática y obtener Abstract Syntax Trees como salida. Muchas gracias, NestorLa forma mejor/más rápida de escribir un analizador en C#
Respuesta
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
- JSON grammar - con producciones de árboles
- Lua grammar
- C grammar
Puede estudiar el código fuente para Mono C# compiler.
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
Mientras todavía está en beta temprana el Oslo Lenguaje de modelado y herramientas de MGrammar de Micro suaves están mostrando algunas promesas.
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
@Nestor - Estoy de acuerdo en que es demasiado pronto para usarlo, pero pensé que merecía una mención. –
+1 para su comentario. Es verdad.Usaría Oslo si estuviera en su versión final. – Nestor
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.
Hay un breve artículo here sobre la construcción de un analizador LL (1), por supuesto, también podría usar un generador.
- 1. ¿La forma más rápida de escribir en un archivo?
- 2. Escribir un analizador simple
- 3. La forma más rápida de escribir y compilar un programa en C/C++ en Windows
- 4. ¿La forma más rápida de escribir archivos hdf5 con Python?
- 5. Forma más rápida de escribir imágenes en Process.StandardInput.BaseStream
- 6. La forma más rápida de escribir un vector STL grande en un archivo usando STL
- 7. ¿La forma más rápida de escribir una matriz de enteros en un archivo en Java?
- 8. La forma más rápida de crear archivos en C#
- 9. ¿La forma más rápida de calcular números primos en C#?
- 10. Escribir un analizador para expresiones regulares
- 11. Tutoriales para escribir un analizador con Javascript
- 12. ¿La forma más rápida de leer/escribir un mapa de bits desde/hasta el archivo?
- 13. Forma rápida de implementar el diccionario en C
- 14. Recursos en línea para escribir un analizador generador
- 15. La forma más rápida de reposicionar la sublista en python
- 16. Forma rápida de modificar manualmente un número
- 17. ¿La forma más rápida de hacer muchas escrituras pequeñas, ciegas en un archivo enorme (en C++)?
- 18. C#, forma rápida de invertir un bool nullable?
- 19. Recursos para escribir un analizador descendente recursivo con la mano
- 20. ¿Sugerencias para escribir un analizador de archivos en Java?
- 21. Escribir en un archivo de forma asíncrona
- 22. ¿Cuál es la forma más rápida de escribir una gran cantidad de datos de la memoria en un archivo?
- 23. ¿La forma más rápida de escribir celdas en Excel con Office Interop?
- 24. ¿Forma rápida de crear una lista de valores en C#?
- 25. C# - La forma más rápida de encontrar un conjunto de cadenas en otra cadena
- 26. ¿La forma más rápida de formatear un número de teléfono en C#?
- 27. Un simple XML C analizador
- 28. Mejores prácticas para escribir un analizador de lenguaje de programación
- 29. ¿Es Perl la forma más rápida de escribir una página de alto rendimiento?
- 30. Cómo escribir un analizador de descenso recursivo desde cero?
¡Gracias! Buena sugerencia – Nestor
Gracias de nuevo Pavel. Punteros muy útiles. – Nestor