Ho un linguaggio specifico del dominio che può essere tradotto in SQL. Devo scrivere il mio lexer, parser e generatore di codice, o ci sono strumenti che potrebbero aiutarmi?Strumento giusto per tradurre una DSL in SQL?
risposta
Sembra che tu stia cercando qualcosa come Eli, che è destinato ad accogliere una specifica e generare un traduttore da esso:
http://eli-project.sourceforge.net/
D'altra parte, si potrebbe essere altrettanto felice scrivendo il parser con uno strumento di generazione come ANTLR e codificando da soli l'AST e il generatore di codice.
La generazione di codice che scrive un linguaggio di alto livello come SQL probabilmente non è molto difficile da implementare, assumendo che la traduzione dal proprio DSL sia semplice.
Se fossi in me, scriverei la cosa in OCaml usando ocamllex e ocamlyacc, ma per prima cosa devi conoscere OCaml.
Questo dipende molto dalla lingua che userete, ma Groovy, Ruby, Scala, F # e Haskell sono buoni linguaggi per farlo.
La lingua utilizzata influirà sugli strumenti da utilizzare.
Si può fare questo in C, ad esempio, ma sarebbe più lavoro, e potrebbe non sembrare piacevole per l'utente.
In alcune lingue è necessario utilizzare strumenti per aiutare con il parser, altri sono migliori senza gli strumenti.
Si consiglia di leggere questo libro per imparare molto di più sull'argomento DSL, DSL in azione.
Se il DSL è stato progettato per migliorare la leggibilità da parte del codificatore DSL, allora sì, è necessario un lexer, un parser e un generatore di codice.
(Altre risposte suggeriscono che se si codifica il DSL "nella sintassi del proprio" meta lingua "" non sono necessari questi parametri meccanici, mentre ciò può essere vero, ottimizza l'incorporabilità del DSL nelle meta- linguaggio piuttosto che la sua leggibilità per gli utenti finali, che credo sia un compromesso insoddisfacente).
No, non è necessario scriverli da zero.
Ci sono molti generatori di parser in natura (YACC, Bison, ANTLR, JavaCC) che ti aiuteranno a concentrarti sulla codifica solo delle regole grammaticali per il tuo DSL; forniscono molti strumenti di analisi di basso livello per elaborare/eseguire le regole grammaticali come motore di analisi. Tuttavia, devi dedicare uno sforzo alla flessione della grammatica concettuale alle limitazioni del particolare generatore di parser (LALR (1), LL (k), ...) ANTLR/Bison/Yacc ti aiuterà a costruire alberi; devi fare un lavoro esplicito per farlo. Dopodiché, sei da solo con parser tradizionali. Molte persone finiscono per essere sorprese una volta arrivati (se arrivano così lontano, i parser per le lingue reali tendono ad essere più lavoro di quanto si aspettino.
Ecco perché c'è un sacco di Life After Parsing: tabelle dei simboli, analisi del codice generazione del codice: il nostro DMS Software Reengineering Toolkit è progettato per aiutarti a creare regole di analisi con vincoli minimi dal motore di grammatica, crea automaticamente alberi (guarda, ma, senza mani!) e fornisce un sacco di supporto per la trasformazione del codice in un'ampia varietà di modi.Inoltre, DMS fornisce una prospettiva e strumenti per supportare la conversione tra i frammenti DSL ("la tua lingua") e l'obiettivo in modi strutturati utilizzando le coppie di modelli di origine/destinazione per specificare la mappatura. Per lo scopo specifico dell'OP, il DMS può essere ottenuto con una grammatica SQL2011, fornendo una buona base per la scrittura dei pattern di destinazione.
Per ulteriori informazioni sulla conversione automatica con strumenti, vedere il mio SO discussion on translating between languages.
Non è necessario un lexer, un parser e un generatore di codice se si utilizza un linguaggio meta appropriato (ad es., Lisp). Tutto è già incluso - puoi costruire il tuo DSL sopra le S-espressioni, puoi generare una parte host del tuo codice in Lisp stesso.
Anche se si desidera una sintassi speciale per il proprio DSL, è molto semplice incorporare un parser in un meta-linguaggio.
Si consiglia di leggere questo libro: Language Implementation Patterns di Terence Parr della serie Pragmatic Programmers. È un'introduzione approfondita all'analisi, alla traduzione e alla compilazione. Si basa molto su ANTLR by Terence Parr per gli esempi, ma è abbastanza generale da permetterti di andare in altri linguaggi e sistemi.
Ho un progetto simile al tuo. Penso che dovresti controllare Xtext e Xtend, dato che possono essere usati direttamente in Eclipse, puoi facilmente ottenere intellisense, grammer, lessico. Ho provato a produrre codice SQL ed è stato un progetto di successo fino ad ora.
- 1. Strumento per convertire (tradurre) C per andare?
- 2. C'è qualche strumento per tradurre il codice Lisp in Python?
- 3. Strumento per SQL Server diff
- 4. Query DSL Elasticsearch da un'istruzione SQL
- 5. Tradurre una query per utilizzare Zend_Db_Select
- 6. SQL formattazione strumento
- 7. Tradurre SQL per lambda LINQ con GroupBy e media
- 8. Strumento per creare diagrammi dalla query SQL
- 9. Creazione di una lingua di query DSL
- 10. Strumento di confronto gratuito per SQL
- 11. Codice EF Primo: metodi che possono tradurre in SQL
- 12. cammello Java DSL scelta in una scelta
- 13. Tradurre gli attributi delle relazioni dal diagramma ER in SQL
- 14. Come faccio a ottenere il "giusto" giusto in una Array.map?
- 15. Incorpora python/dsl per lo scripting in un'applicazione web PHP
- 16. Come ottengo una matrice in cui tradurre, quindi ruotare, quindi tradurre poi ruotare una seconda volta?
- 17. DSL per sintesi immagine Clojure
- 18. Qualche strumento per convertire il database SQLite in SQL Server?
- 19. Qualunque strumento online per convertire istruzioni SQL in formato stringa?
- 20. Roslyn è lo strumento giusto per un controllo delle espressioni in fase di compilazione?
- 21. Resque o Gearman - scegliere lo strumento giusto per i lavori in background
- 22. strumento Una GUI per MongoDB
- 23. Esercitazioni per scrivere DSL in Ruby
- 24. Sintassi ANTLR Evidenzia DSL in Visual Studio
- 25. css3 tradurre in percentuale
- 26. Uso dei suggerimenti tipo per tradurre Python in Cython
- 27. Utilizzo di una DSL per generare codice C#
- 28. Test-First strumento di sviluppo per SQL Server 2005?
- 29. Qualsiasi strumento per esportare l'intero DB Oracle come script SQL
- 30. Strumento giusto per il tracciamento delle modifiche alla struttura del DB
Hai intenzione di analizzare anche la sintassi del linguaggio specifico del dominio in SQL? – alexm
Lasciatemi riformulare: qual è la lingua host che farebbe la generazione SQL? – alexm
Dipende molto dalla lingua che stai usando e dalla complessità del tuo DSL. –