2009-03-12 4 views
6

Sto cercando modi/strumenti/progetti per tradurre il bytecode Java in altri linguaggi di programmazione o, in mancanza, almeno in una rappresentazione strutturata (come XML). Idealmente open source, naturalmente.Conversione di bytecode Java in altre rappresentazioni e linguaggi di programmazione

Ho visto ASM, il "framework di manipolazione e analisi di bytecode". Non supporta la traduzione in altre rappresentazioni, ma sembra una buona base per un tale progetto. Purtroppo, nessuno dei progetti elencati sul loro users page si avvicina.

risposta

7

ASM ha l'albero api che può fondamentalmente fornire l'intera struttura del bytecode. Sembra che sia abbastanza facile da usare quello o anche il visitatore a stamparlo in formato XML o in qualche altro formato. Non sono sicuro di quale sia l'uso.

La traduzione di nuovo in Java è il lavoro di un decompilatore e quelli come Jad fanno bene. Ma questo è difficile perché a) ci sono informazioni perse durante la traduzione da sorgente a bytecode e b) c'è ambiguità in quella fonte multipla che può produrre lo stesso codice byte.

Se si desidera passare direttamente da un codice bytecode ad un altro linguaggio di alto livello, sarà difficile eseguirlo in modo completo e significativo, per tutti gli stessi motivi la decompilazione è difficile, tranne che in un altro linguaggio.

Se si desidera passare dall'origine Java all'origine di un'altra lingua, ciò è stato fatto prima, come in questo Java-to-Python converter. In qualche modo è più semplice convertire Java in un AST con qualcosa come Antlr, o gli strumenti del compilatore Java incorporato, Project Jackpot, ecc. Anche allora, presumo che non otterrai codice molto idiomatico nella lingua di destinazione.

1

Sembra che stiate cercando un cross-compilatore. Conosco il progetto xmlvm ma non l'ho mai usato. Forse questo è adatto alle tue esigenze.

1

Si potrebbe provare gcj per convertire il codice byte in codice nativo.

Se si desidera convertire in linguaggi come Python/Groovy/ruby ​​forse considerare la scrittura in tali lingue direttamente sulla JVM (mi rendo conto che questo non è esattamente quello che stai cercando).

Forse cercare alcuni esempi da qualcosa come questo Eclipse Byte Code outline viewer.

Infine, la conversione da un linguaggio di basso livello (codice byte) a un altro sarà piuttosto complicata e la correttezza sarà un problema.

2

Provare BCEL (libreria di codici byte engineering). È possibile implementare un'interfaccia Visitor, che è possibile utilizzare per generare ciò che si desidera (codice sorgente in un'altra lingua, AST personalizzato, XML, ecc.).

L'ho usato per un progetto al college in cui ho (per la maggior parte) modificato un framework di analisi del programma che lavorava sul codice sorgente Java in uno che poteva funzionare anche contro il codice byte Java. Questo compito comportava la generazione di nodi per la rappresentazione interna AST del framework di analisi.

Inoltre,

ho brevemente scremato la documentazione per il progetto "ASM" lei ha citato. Sembra che definisca diverse classi precedenti. Dovresti essere in grado di usare quelli per fare quello che vuoi.

Se non si ha familiarità con il modello di visitatore, controllare la descrizione here. Inoltre, se non lo hai ancora letto, il libro "Gang of Four" è una buona lettura.

Problemi correlati