Tengo un lenguaje específico de dominio que se puede traducir a SQL. ¿Debo escribir mi propio lexer, analizador y generador de código, o hay herramientas que podrían ayudarme?¿Herramienta correcta para traducir un DSL a SQL?
Respuesta
Suena como si estuviera buscando algo como Eli, que se destina a aceptar una especificación y generar un traductor de ella:
http://eli-project.sourceforge.net/
Por otro lado, es posible ser tan feliz escribiendo su analizador sintáctico con una buena herramienta de generación como ANTLR y codificando el AST y el generador de código usted mismo.
La generación de código que escribe un lenguaje de alto nivel como SQL probablemente no sea muy difícil de implementar, suponiendo que la traducción desde su DSL es sencilla.
Si fuera yo, escribiría la cosa en OCaml usando ocamllex y ocamlyacc, pero para eso primero necesita saber OCaml.
Esto depende en gran medida del idioma que utilizará, pero Groovy, Ruby, Scala, F # y Haskell son buenos idiomas para hacerlo.
El idioma que use afectará las herramientas que también debería usar.
Puede hacer esto en C, por ejemplo, pero sería más trabajo y puede que no se vea tan bien para el usuario.
Algunos idiomas necesitarás usar herramientas para ayudar con el analizador, otros son mejores sin las herramientas.
Le recomendamos leer este libro para obtener más información sobre DSL, DSL en acción.
Si su DSL está diseñado para facilitar la lectura por el codificador de DSL, entonces sí, se necesita un analizador léxico, un analizador y un generador de código.
(Otras respuestas sugieren que si codifica la DSL "en la sintaxis de su 'metalenguaje'" no necesita estos mechansims; mientras que eso puede ser cierto, optimiza para la incorporación de la DSL en la meta- idioma en lugar de su legibilidad para los usuarios finales, lo que creo que es un mal intercambio).
No, no tiene que escribirlos desde cero.
Hay muchos generadores de analizadores en la naturaleza (YACC, Bison, ANTLR, JavaCC) que le ayudarán a concentrarse en la codificación de las reglas gramaticales de su DSL; proporcionan una gran cantidad de maquinaria de análisis de bajo nivel para procesar/ejecutar sus reglas de gramática como motor de análisis sintáctico. Aún así, debe esforzarse para flexibilizar su gramática conceptual a las limitaciones del generador del analizador en particular (LALR (1), LL (k), ...) ANTLR/Bison/Yacc lo ayudará a construir árboles; tienes que hacer un trabajo explícito para hacer esto. Después de eso, estás solo con los analizadores tradicionales. La mayoría de las personas terminan sorprendidas una vez que llegan allí (si llegan hasta aquí, los analizadores de lenguajes reales tienden a tener más trabajo de lo que esperan.
Eso es porque hay un montón de Life After Parsing: tablas de símbolos, análisis de código , generación de código. Nuestro DMS Software Reengineering Toolkit está diseñado para ayudarlo a construir reglas de análisis con restricciones mínimas del motor de gramática, construye automáticamente árboles (¡mire, no, manos!) y proporciona una gran cantidad de soporte para la transformación de códigos en una amplia variedad de formas.Además, DMS proporciona una perspectiva y herramientas para admitir la conversión entre fragmentos de DSL ("su idioma") y el objetivo de forma estructurada utilizando los pares de patrones de origen/destino para especificar el mapeo. Para el propósito específico de OP, DMS se puede obtener con una gramática SQL2011, que proporciona una línea de base agradable para escribir los patrones objetivo.
Para leer más acerca de la conversión automática con herramientas, vea mi SO discussion on translating between languages.
No necesita un lexer, un analizador y un generador de código si está utilizando un metalenguaje adecuado (por ejemplo, Lisp). Todo ya está incluido: puedes construir tu DSL sobre expresiones S, puedes generar una parte de host de tu código en Lisp.
Incluso si desea una sintaxis especial para su DSL, es muy fácil integrar un analizador en un metalenguaje.
Quizás desee leer este libro: Language Implementation Patterns por Terence Parr de la serie The Pragmatic Programmers. Es una introducción completa al análisis sintáctico, la traducción y la compilación. Se basa en gran medida en ANTLR by Terence Parr para obtener ejemplos, pero es lo suficientemente general como para ponerlo en funcionamiento en otros idiomas y sistemas.
Tengo un proyecto similar al suyo. Creo que deberías echar un vistazo a Xtext y Xtend, ya que se pueden usar directamente en Eclipse, puedes obtener fácilmente intellisense, grammer, lexer. Traté de producir código SQL y ha sido un proyecto exitoso hasta ahora.
- 1. Herramienta para convertir (traducir) C para ir?
- 2. Traducir sentencia LINQ a sql
- 3. herramienta similar a JavaDoc para scripts SQL
- 4. Herramienta avanzada para optimizar T-SQL?
- 5. escribir un DSL para la plataforma .Net
- 6. Traducir cadenas XML para Android
- 7. Código EF Primero: Métodos que se pueden traducir a SQL
- 8. Traducir Algoritmo C a Python
- 9. Herramienta correcta para rastrear cambios en la estructura de DB
- 10. Representación textual para diagramas de clase UML: DSL para UML
- 11. Herramienta de comparación SQL para Oracle?
- 12. CSS3 Traducir a través de un arco
- 13. ¿Existe una herramienta para SQL refactorización, un poco como un ReSharper para SQL
- 14. Traducir el código de Python a Smalltalk
- 15. ¿Traducir una tabla a un diccionario jerárquico?
- 16. SQL Formateo herramienta
- 17. Creando un lenguaje de consulta DSL
- 18. Groovy vs Scala para DSL interno
- 19. ¿Cuál sería la mejor herramienta para crear una DSL natural en Java?
- 20. Elección del marco DSL
- 21. Escribiendo un compilador para un DSL en python
- 22. Traducir matlab a python/numpy
- 23. Herramienta SQL to LINQ
- 24. Traducir un lienzo html5
- 25. ¿Traducir automáticamente archivos .po?
- 26. Herramienta gratuita para migrar de Sybase SQL Anywhere 12 a MS SQL Server 2008
- 27. Herramienta para hacer un diagrama a partir de la consulta SQL
- 28. ¿Hay una DSL para escribir expresiones regulares?
- 29. DSL para la síntesis de imágenes Clojure
- 30. herramienta gratuita de comparación SQL
¿Piensas analizar la sintaxis del lenguaje específico de tu dominio en SQL también? – alexm
Permítanme reformular: ¿Cuál es el lenguaje de host que haría la generación de SQL? – alexm
Realmente depende del idioma que estés usando y cuán complejo sea tu DSL. –