用于将非Java转换为Java源代码的工具

时间:2020-03-05 18:48:30  来源:igfitidea点击:

有没有很好的工具可以自动将非Java源代码转换为Java源代码?

我不期望有什么完美的东西,只是为了避免麻烦的工作。

我猜难度是在不断变化的。 C应该相对容易(只要我们忽略所有库)。 (写得很好)C ++还不错。 C需要做一点OO。 (静态类型)功能语言可能很容易理解。动态OO语言可能需要非本地分析。

解决方案

回答

我们可以尝试做的一件事是找到所讨论语言的Java字节码编译器(有用于各种语言的JVM编译器),然后使用Jad这样的反编译器将字节码反编译回Java。

这充满了危险。重新生成的代码很烂,可能无法读取。

回答

Google:ANTLR

回答

ADA to Java可以通过查找和替换来完成!

回答

如果只想使用一些旧的C / Pascal代码,也可以使用JNI从Java调用它。

如果我们想在Java applet或者类似的受限环境中运行它,并且它不一定非常高效,则可以将NestedVM(这是MIPS到Java字节码转换器)与gcc交叉编译器结合使用,该交叉编译器可以编译为MIPS)。但是不要期望从中获得可读的Java代码。

回答

语言转换非常简单,但是我们会发现库是不同的。
这可能是大部分工作。

回答

仅当非Java代码不够庞大时,这些工具中的任何一种才可能有用。

如果它是巨大的非Java代码,并且我们想认真地将其翻译为Java,那么无需考虑什么,它不仅是几百行代码,而且它下面有一个设计,下面的人很少做出决定该代码可以解决某些问题,并且在那里很少有任何工作。并且花时间在任何优秀的翻译人员身上将是不值得的,因为它不存在,这不仅仅是从一种语言到另一种语言的语法翻译。

如果它的代码不是那么大,最好用Java重写,因为它有很多现成的API包,这可能没什么大不了的,为此聘用很少的实习生也可能会有所帮助。

回答

从源到源的迁移属于程序转换的范畴。 Program-Transformation.org跟踪了许多对语言识别,分析和转换有用的工具。以下是一些能够进行源到源迁移的功能:

  • ASF + SDF元环境-如前所述,此工具没有新的开发。相反,开发人员将重点放在Rascal。
  • Rascal元编程语言
  • Stratego / XT
  • TXL
  • DMS软件再造工具包(商业)

如果我们花任何时间使用其中一种开源工具,我们会注意到,即使它们包含源到源迁移功能,也很难找到有效的示例。我想这是因为不存在一种"一刀切"的迁移方式。每个项目/团队都会独特地使用一种语言,并且会因所使用的库,类型复杂性,惯用语,样式等而有所不同。为每个迁移定义一些转换是有意义的。这意味着在必须进行自动迁移之前,项目必须达到一定的临界质量。

一些相关文件:

  • Rascal的简介-包括从第94页开始的玩具语言Pico和Assembly之间的转换。
  • 破解500语言问题
  • 将旧版Java程序自动转换为C#(门控)的实验-使用TXL