Un modo per farlo è utilizzare l'infrastruttura progettata per creare traduttori.
Molte persone pensano che questo significhi "un generatore di parser"; è in realtà ingenuo. Un buon traduttore deve analizzare la lingua, certo, ma la traduzione deve anche tenere traccia di ciò che significano i simboli, verificando che ciò che viene detto non è una sciocchezza, generando e ottimizzando il codice. Hai bisogno di molto più macchinario di un semplice parser (generatore) per farlo bene. Vedi Life After Parsing.
nostra DMS Software Reengineering Toolkit è un insieme di strumenti per la costruzione di analizzatori di programma e traduttori, anche per quanto solo un elemento di un generatore di parser molto forte.
DMS include anche un program transformation engine, che consente di scrivere regole di traduzione in termini di lingue da tradurre, if you see this, transform it to that. Scrivere regole di traduzione direttamente nella sintassi di superficie delle lingue di interesse rende più facile la scrittura, l'ispezione, il debug e la manutenzione.
Detto questo, scrivere un simile traduttore non è un compito facile; devi enumerare il set completo di costrutti di sintassi con la semantica implicita e capire come associarlo a una combinazione di sintassi della lingua di destinazione più librerie aggiuntive che potresti personalizzare sul lato target. Questo richiede mesi-uomo, plurale, anche per esperti, per traduttore.
DMS è agnostico su quali linguaggi di programmazione sono coinvolti. Devi definire le lingue che ti interessano; ha una grande stabilità di definizioni linguistiche (utili come fonti o obiettivi, a tua scelta) per linguaggi standard come Java e JavaScript. Questa stabile disponibile aiuta ad abbreviare il ciclo di sviluppo, ma generalmente non è il costo dominante.
C'è un santo graal di costruire un "traduttore universale" in cui si scrive un insieme di regole e tutto è peachy da allora in poi. Quell'idea è una fantasia. Vale la pena capire che un insieme di regole di traduzione dalla lingua A alla B, non è in realtà utile per tradurre la lingua da C a D, perché le regole combinano la conoscenza della sintassi specifica e della semantica implicita. Tuttavia, se si costruiranno più "transpilers", farlo su una base comune è un'enorme vittoria in termini di curva di apprendimento e manutenibilità a lungo termine.
Utilizzando strumenti come DMS, è possibile scrivere extremely accurate translators..
Si scrive un transpiler creando un parser per la lingua di origine, creando un albero di sintassi e quindi convertendolo in codice nella lingua di destinazione. A seconda dell'attività, potrebbe essere più semplice non scrivere un transpiler, ma semplicemente utilizzare la generazione di codice basata su modelli per creare codice per più piattaforme. – yole
Ciao, potresti fornire un collegamento ad un esempio funzionante di esso per una lingua? –
[CoffeeScript] (http://coffeescript.org/) è un transpiler che genera JavaScript. Controlla la sua sorgente annotata; questo dovrebbe essere abbastanza facile da capire. – yole