Question

Je cherche des moyens / outils / projets pour traduire le bytecode Java dans d'autres langages de programmation ou, à défaut, au moins dans une représentation structurée (comme XML). Idéalement open source, naturellement.

J'ai consulté le ASM , le "cadre de manipulation et d'analyse du bytecode". Cela ne prend pas en charge la traduction vers d'autres représentations, mais semble constituer une bonne base pour un tel projet. Malheureusement, aucun des projets répertoriés sur leur page d'utilisateurs ne se ferme de près.

Était-ce utile?

La solution

ASM a l’API de l’arborescence qui peut vous donner la structure complète du code intermédiaire. On dirait que c'est assez facile à utiliser, ou même à l'API du visiteur, de l'imprimer en XML ou dans un autre format. Je ne sais pas à quoi ça sert.

La reconversion en Java est un travail de décompilation et des tâches comme Jad sont acceptables. Mais c’est difficile, car a) des informations sont perdues lors de la conversion du code source en source codée et b) qu’il existe une ambiguïté dans le fait que plusieurs sources peuvent générer le même code octet.

Si vous voulez réellement passer directement du bytecode à un autre langage de haut niveau, il vous sera difficile de le faire de manière complète et significative, pour les mêmes raisons, la décompilation est difficile, sauf encore pire dans un autre langage.

Si vous souhaitez passer d'une source Java à une autre source, cette opération a déjà été effectuée, comme dans cet exemple Convertisseur Java-à-Python . C’est un peu plus facile, car vous pouvez convertir Java en AST avec quelque chose comme Antlr , ou les outils de compilateur Java intégrés, Project Jackpot , etc. Même dans ce cas, je suppose que vous n'obtiendrez pas un code très idiomatique dans la langue cible.

Autres conseils

Essayez BCEL (bibliothèque d'ingénierie de code byte). Vous pouvez implémenter une interface de visiteur, que vous pouvez utiliser pour générer ce que vous voulez (code source dans une autre langue, un AST personnalisé, xml, etc.).

Je l’ai utilisée pour un projet universitaire où j’ai (principalement) modifié un cadre d’analyse de programme fonctionnant avec le code source Java en un cadre compatible avec le code en octets Java. Cette tâche impliquait la génération de nœuds pour la représentation AST interne du cadre d'analyse.

En outre,

J'ai brièvement parcouru la documentation de "ASM". projet que vous avez mentionné. On dirait qu'il définit plusieurs classes vistior. Vous devriez également pouvoir les utiliser pour faire ce que vous voulez.

Si vous ne connaissez pas bien le profil des visiteurs, consultez la description ici . De même, si vous ne l'avez pas encore lu, le " bande de quatre " livre est une bonne lecture.

On dirait que vous recherchez un compilateur croisé. Je connais le projet xmlvm , mais je ne l'ai jamais utilisé. Peut-être que cela répond à vos besoins.

Vous pouvez essayer gcj de convertir le code octet en code natif.

Si vous souhaitez convertir des langages comme python / groovy / ruby, envisagez peut-être d’écrire dans ces langages directement sur la machine virtuelle (je réalise que ce n’est pas exactement ce que vous recherchez).

Peut-être récupérez-vous quelques exemples dans ce genre de Afficheur de contour de code Eclipse Byte .

Enfin, la conversion d'un langage de bas niveau (code octet) en un autre sera assez délicate et son exactitude sera un problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top