Есть ли какие-нибудь хорошие инструменты для автоматического преобразования исходного кода, отличного от Java, в исходный код Java?
Я не жду чего-то идеального, просто чтобы избавиться от наихудшей работы.
Думаю, есть скользящая шкала сложности. C# должен быть относительно простым (пока вы игнорируете все библиотеки). (хорошо написано) C++ не так уж и плох. C требует немного OO. Функциональные языки (статического типа) могут быть легко изучены. Для динамических объектно-ориентированных языков может потребоваться нелокальный анализ.




Вы можете попробовать найти компилятор байт-кода Java для языка, о котором вы говорите (существуют компиляторы JVM для всех типов языков), а затем декомпилировать байт-код обратно в Java с помощью декомпилятора, такого как Jad.
Это чревато опасностями. Восстановленный код будет отстойным и, вероятно, будет нечитаемым.
Google: ANTLR
Из ADA в Java можно выполнить поиск и замену!
как насчет обратного? Я парень java, желающий изучить ADA
ADA не слишком отличается, шаблоны все похожи, пакеты похожи на статические классы Java, классы ADA похожи на классы Java. Стандартный ввод-вывод является общим в ADA <?>. Единственная странность - это расширение пакета, и то, что деревья файлов и имена пакетов не совпадают 1: 1, как в Java. Так что вроде C++ :)
Если вы просто хотите использовать устаревший код C / Pascal, вы также можете использовать JNI для его вызова из Java.
Если вы хотите запустить его в Java-апплете или аналогичной ограниченной среде, и он не должен быть очень эффективным, вы можете использовать Вложенная виртуальная машина (который является преобразователем байт-кода из MIPS в Java) в сочетании с кросс-компилятором gcc, который компилируется в MIPS). Но не ожидайте от этого получить читабельный код Java.
Набор инструментов NestedVM довольно тяжелый и немного устаревший. В основном вы конвертируете инструкции MIPS в байт-код Java (MIPS32 был выбран как самый близкий к JVM)
Преобразование языка довольно простое, но вы обнаружите, что библиотеки разные. Скорее всего, это будет большая часть вашей работы.
Любой из этих инструментов может помочь, только если ваш код, отличный от java, недостаточно велик.
Если это огромный не java-код, и если вы хотите серьезно перевести его на java, то нужно подумать о нескольких вещах, это не просто сотни строк кода, под ним есть дизайн, есть несколько решений, принятых людьми ниже код, с помощью которого могли быть решены определенные проблемы, и кое-что там работало. и не стоит тратить время на хороший переводчик, поскольку его не будет, это не просто перевод синтаксиса с одного языка на другой.
Если это не такой огромный код, его лучше переписать на java, так как у него так много пакетов API из коробки, это может не иметь большого значения, найм нескольких стажеров для этого также может помочь.
Миграции от источника к источнику подпадают под действие Трансформация программы. Program-Transformation.org отслеживает куча инструментов, которые полезны для распознавания, анализа и преобразования языков. Вот некоторые из них, которые могут выполнять миграцию из исходного кода в исходный:
Если вы проведете какое-то время с одним из инструментов с открытым исходным кодом, вы заметите, что, хотя они включают в себя миграцию из исходного кода в качестве функции, трудно найти рабочие примеры. Я полагаю, это потому, что не существует такой вещи, как универсальная миграция. Каждый проект / группа использует уникальный язык и может различаться в зависимости от используемых библиотек, сложности типов, идиом, стиля и т. д. Имеет смысл определять некоторые преобразования для каждой миграции. Это означает, что проект должен достичь некоторой критической массы, прежде чем автоматическая миграция окупится.
Несколько связанных документов:
Хороший момент, но в зависимости от исходного языка это будет огромная задача.