Перевод байт-кода Java в другие представления и языки программирования - PullRequest
7 голосов
/ 12 марта 2009

Я ищу способы / инструменты / проекты для перевода байт-кода Java на другие языки программирования или, в случае неудачи, по крайней мере в структурированное представление (например, XML). Идеально с открытым исходным кодом, естественно.

Я посмотрел на ASM , «структуру манипулирования и анализа байт-кода». Он не поддерживает перевод в другие представления, но выглядит хорошей основой для такого проекта. К сожалению, ни один из проектов, перечисленных на их пользовательской странице , не подходит близко.

Ответы [ 4 ]

7 голосов
/ 12 марта 2009

ASM имеет дерево API, которое может дать вам полную структуру байт-кода. Похоже, это довольно легко использовать, или даже API посетителя, чтобы распечатать это в XML или другом формате. Не уверен, что польза от этого, хотя.

Перевод обратно на Java - это работа декомпилятора, и такие, как Jad, делают хорошо. Но это сложно, потому что: а) во время трансляции байт-кода теряется информация, исходящая от источника, и б) существует неоднозначность в том, что несколько источников могут выдавать один и тот же байт-код.

Если вы действительно хотите перейти от байт-кода к другому высокоуровневому языку напрямую, это будет непросто сделать как всесторонне, так и содержательно, по тем же причинам декомпиляция трудна, за исключением еще хуже на другом языке.

Если вы хотите перейти от источника Java к источнику другого языка, это было сделано ранее, как в этом преобразователе Java-в-Python . Это несколько проще, так как вы можете конвертировать Java в AST с помощью чего-то вроде Antlr или встроенных инструментов компилятора Java, Project Jackpot и т. Д. Даже тогда, я полагаю, вы выиграли ' получить очень идиоматический код на целевом языке.

2 голосов
/ 12 марта 2009

Попробуйте BCEL (библиотека разработки байт-кода). Вы можете реализовать интерфейс Visitor, который вы можете использовать для генерации того, что вам нужно (исходный код на другом языке, пользовательский AST, xml, что угодно).

Я использовал его для проекта в колледже, где я (в основном) модифицировал среду анализа программ, которая работала над исходным кодом Java, в систему, которая также могла работать против байтового кода Java. Эта задача заключалась в создании узлов для внутреннего представления AST в структуре анализа.

Кроме того,

Я кратко просмотрел документацию по проекту "ASM", который вы упомянули. Похоже, он определяет несколько классов vistior. Вы должны быть в состоянии использовать их, чтобы делать то, что вы хотите.

Если вы не знакомы с шаблоном посетителей, ознакомьтесь с описанием здесь . Кроме того, если вы еще не читали ее, книга " Банда четырех " - это хорошее чтение.

1 голос
/ 12 марта 2009

Вы можете попробовать gcj , чтобы преобразовать байт-код в собственный код.

Если вы хотите конвертировать в такие языки, как python / groovy / ruby, возможно, стоит подумать о написании этих языков непосредственно на JVM (я понимаю, что это не точно , что вы ищете).

Возможно, вычеркните несколько примеров из чего-то подобного Средство просмотра Eclipse Byte Code .

Наконец, преобразование одного языка низкого уровня (байт-кода) в другой будет довольно сложным, и правильность будет проблемой.

1 голос
/ 12 марта 2009

Похоже, вы ищете кросс-компилятор. Я знаю о проекте xmlvm , но никогда не использовал его. Может быть, это соответствует вашим потребностям.

...