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

6

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

我并不期望完美的结果,只要能减少一些基础性的工作量就很好了。

我猜想难度存在一个滑动比例。C#应该相对容易(只要你忽略所有库)。写得好的 C++ 也还好。C语言需要一些面向对象编程的知识。(静态类型)函数式语言可能更容易理解。动态对象语言可能需要进行非局部分析。

7个回答

5

源代码迁移属于程序转换的范畴。Program-Transformation.org跟踪一些有用于语言识别、分析和转换的工具。以下是一些能够进行源码迁移的工具:

如果你使用开源工具,你会注意到即使它们包括源到源迁移作为一个功能,也很难找到可行的示例。我认为这是因为没有一种通用的迁移方案。每个项目/团队都独特地使用语言,并且可能因所使用的库、类型复杂性、习惯用语、风格等而有所不同。定义一些针对每次迁移的转换是有意义的。这意味着在自动迁移值得努力之前,项目必须达到一定的临界质量。
几篇相关文档:
- Rascal简介 - 包括从玩具语言Pico到Assembly的迁移,从第94页开始。 - 解决500种语言问题 - 遗留Java程序自动转换为C#的实验 (需要付费) - 使用TXL

5

你可以尝试找到针对所讨论语言的Java字节码编译器(有各种语言的JVM编译器),然后使用像Jad这样的反编译器将字节码反编译回Java。

这种方法充满了风险。重新生成的代码可能很糟糕,而且可能会难以阅读。


3

谷歌:ANTLR


好的观点,但是根据源语言的不同,这将是一项巨大的工作。 - user181750

1

语言转换相对简单,但你会发现库不同。这可能是你大部分工作的内容。


0

如果你的非Java代码不够庞大,那么这些工具可能会有所帮助。

如果你的非Java代码很庞大,并且你想认真地将其翻译成Java,那么需要考虑一些事情。这不仅仅是几百行代码的问题,它下面还有一个设计,人们在代码下面做出了一些决策,因此可能已经解决了某些问题,也有一些东西正在运作。花时间在任何好的翻译器上都不值得,因为它不存在,这不仅仅是从一种语言到另一种语言的语法翻译。

如果代码不是很庞大,最好重新用Java编写,因为它有很多API包可以直接使用,这可能并不是什么大问题,雇用一些实习生也可能会有所帮助。


0
如果您只想使用一些传统的C/Pascal代码,您也可以使用JNI从Java中调用它。
如果您想在Java小程序或类似受限环境中运行它,并且它不需要非常高效,您可以使用NestedVM(这是一个MIPS到Java字节码转换器),结合gcc交叉编译器(编译为MIPS)。但不要期望从中获得可读的Java代码。

NestedVM 工具链相对较重且有点过时。基本上,它将 MIPS 指令转换为 Java 字节码(选择 MIPS32 是因为它最接近 JVM)。 - Thorbjørn Ravn Andersen

-1

将ADA转换为Java可以通过查找和替换完成!


反过来呢?我是一个Java程序员,想学习ADA。 - WolfmanDragon
ADA并不是很不同,模板非常相似,包类似于Java的静态类,ADA类就像Java类一样。标准IO在ADA中是通用的<?>。唯一奇怪的事情是包扩展,以及文件树和包名称不像在Java中一样1:1对应。所以就像C++ :) - Tim Williscroft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接