Se stai traducendo alcuni DSL in qualche codice C generato (o qualcosa di simile), guarda prima questo e che risponde.
In realtà sto facendo lo stesso all'interno di MELT , una lingua specifica del dominio Lispy per estendere compiler GCC
Non hai spiegato a quale tipo di DSL stai pensando, e come sarebbe stato usato il codice C generato. Generate un programma standalone o qualche "plugin" o "libreria"?
Un problema significativo è la gestione della memoria. Dovresti assolutamente leggere la raccolta dei rifiuti (ad esempio, leggi manuale GC ).
Ovviamente, traduzione di una lingua di dominio di alto livello su C (o qualche altro linguaggio simile a C o anche qualsiasi linguaggio di programmazione che sia di livello inferiore rispetto al DSL) è qualche forma di compilazione .
Se hai tradotto da una DSL di livello inferiore a una lingua di livello superiore, puoi leggere su decompilation e forse analisi binaria statica .
BTW, anche per un "piccolo DSL" e un linguaggio di destinazione semplice tipo C (o Pascal), è molto lavoro (probabilmente almeno un anno).
Ciò che genera un linguaggio simile a C (con una buona implementazione del compilatore) ti porta a lavorare meno sulle tecniche di ottimizzazione all'interno del tuo compilatore, con la speranza realistica che il C (o Pascal , etc ...) il compilatore che stai generando il codice sarebbe in grado di ottimizzare il tuo codice generato. Potresti anche considerare di generare Gimple (con il nuovo libgccjit dal recente GCC ) o LLVM o usa qualche altra libreria JIT (es. libjit ).