Domanda

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.

Ho esaminato ASM , il framework di manipolazione e analisi bytecode " ;. Non supporta la traduzione in altre rappresentazioni, ma sembra una buona base per un tale progetto. Purtroppo, nessuno dei progetti elencati nella loro pagina degli utenti si avvicina.

È stato utile?

Soluzione

ASM ha l'API dell'albero che in pratica può darti la struttura completa del bytecode. Sembra che sia abbastanza facile usarlo o anche l'api del visitatore per stamparlo in XML o in qualche altro formato. Non sono sicuro di quale uso sia.

La traduzione di nuovo in Java è un lavoro da decompilatore e quelli come Jad fanno bene. Ma questo è difficile perché a) ci sono informazioni perse durante la traduzione da codice sorgente eb) b) c'è ambiguità nel fatto che più fonti possono produrre lo stesso codice byte.

Se in realtà vuoi passare direttamente dal bytecode a un'altra lingua di alto livello, sarà difficile fare entrambe le cose in modo completo e significativo, per tutti gli stessi motivi per cui la decompilazione è difficile, tranne peggio in un'altra lingua.

Se vuoi passare da una fonte Java a un'altra lingua, questo è stato fatto prima, come in questo convertitore da Java a Python . È un po 'più semplice poiché puoi convertire Java in un AST con qualcosa come Antlr o gli strumenti di compilazione Java integrati, Project Jackpot , ecc. Anche in questo caso, presumo che non otterrai un codice molto idiomatico nella lingua di destinazione.

Altri suggerimenti

Prova BCEL (libreria di ingegneria del codice byte). Puoi implementare un'interfaccia Visitatore, che puoi usare per generare ciò che vuoi (codice sorgente in un'altra lingua, un AST personalizzato, xml, qualunque cosa).

L'ho usato per un progetto al college in cui ho (principalmente) modificato un framework di analisi del programma che ha funzionato sul codice sorgente Java in uno che potrebbe funzionare anche con il codice byte Java. Tale compito prevedeva la generazione di nodi per la rappresentazione AST interna del framework di analisi.

Inoltre,

Ho brevemente sfogliato la documentazione per l '"ASM" progetto che hai citato. Sembra che definisca diverse classi vistior. Dovresti essere in grado di usarli per fare anche quello che vuoi.

Se non hai familiarità con il modello di visitatore, controlla la descrizione qui . Inoltre, se non l'hai ancora letto, il " Gang of Four " il libro è una buona lettura.

Sembra che tu stia cercando un compilatore incrociato. Conosco il progetto xmlvm ma non l'ho mai usato. Forse questo soddisfa le tue esigenze.

Puoi provare gcj per convertire il codice byte in codice nativo.

Se vuoi convertirti in lingue come python / groovy / ruby ??forse stai pensando di scrivere in quelle lingue direttamente sulla JVM (mi rendo conto che questo non è esattamente quello che stai cercando).

Forse scavalcare alcuni esempi da qualcosa del genere Visualizzatore di contorni del codice byte Eclipse .

Infine, la conversione da una lingua di basso livello (codice byte) in un'altra sarà piuttosto complicata e la correttezza sarà un problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top