Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于将非Java转换为Java源代码的工具_Java_Compiler Construction - Fatal编程技术网

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

用于将非Java转换为Java源代码的工具,java,compiler-construction,Java,Compiler Construction,有没有好的工具可以自动将非Java源代码转换成Java源代码 我并不期待什么完美的东西,只是为了摆脱最糟糕的工作 我想难度是有一个递减的。C#应该相对容易(只要忽略所有库)。(写得好)C++不太坏。C需要做一点OO。(静态类型)函数式语言可能很容易学习。动态OO语言可能需要非本地分析。您可以尝试的一件事是为您正在谈论的语言找到Java字节码编译器(有各种语言的JVM编译器),然后使用类似Jad的反编译器将字节码反编译回Java 这充满了危险。重新生成的代码将很糟糕,很可能无法读取。

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

我并不期待什么完美的东西,只是为了摆脱最糟糕的工作


我想难度是有一个递减的。C#应该相对容易(只要忽略所有库)。(写得好)C++不太坏。C需要做一点OO。(静态类型)函数式语言可能很容易学习。动态OO语言可能需要非本地分析。

您可以尝试的一件事是为您正在谈论的语言找到Java字节码编译器(有各种语言的JVM编译器),然后使用类似Jad的反编译器将字节码反编译回Java


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

adatojava可以通过查找和替换来完成

如果您只想使用一些遗留的C/Pascal代码,还可以使用JNI从Java调用它


如果您希望在Java小程序或类似的受限环境中运行它,并且它不必非常高效,那么您可以将它(MIPS到Java字节码转换器)与编译为MIPS的gcc交叉编译器结合使用。但是不要期望从中获得可读的Java代码。

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

只有当您的非java代码不够庞大时,这些工具中的任何一个都可能会有所帮助

如果它是巨大的非java代码,如果你想认真地把它翻译成java,那么就不需要考虑什么,它不仅仅是几百行代码,它下面有一个设计,代码下面的人很少做出决定,因为某些问题可能已经解决,而且很少有事情在那里工作。在任何一个好的译者身上投入时间都是不值得的,因为它不存在,它不仅仅是从一种语言到另一种语言的语法翻译


如果代码不是那么庞大,最好用java重新编写,因为它有这么多现成的API包,这可能没什么大不了的,雇佣几个实习生也会有所帮助。

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

  • -如前所述,该工具没有新的发展。相反,开发人员把重点放在了流氓身上
  • (商业)
如果您花时间使用其中一个开源工具,您会注意到,即使它们将源代码到源代码迁移作为一项功能,也很难找到有效的示例。我想这是因为不存在一刀切的迁移。每个项目/团队对一种语言的使用都是独一无二的,并且会因使用的库、类型复杂性、习惯用法、样式等而有所不同。在每次迁移中定义一些转换是有意义的。这意味着一个项目必须达到一定的临界质量,然后才值得进行自动迁移

一些相关文件:

  • -包括从第94页开始的玩具语言Pico和汇编之间的迁移
  • (门控)-使用TXL

反面怎么样?我是一个java爱好者,想学习ADAADA,ADA没有太大的不同,模板非常相似,包就像java静态类,ADA类就像java类。标准IO在ADA中是通用的。唯一奇怪的是包扩展,文件树和包名并不像Java中那样按1:1排列。所以像C++:好的点,但根据源语言,这将是一个巨大的事情。NestedVM toolchain相当沉重,有点过时。基本上,您可以将MIPS指令转换为Java字节码(选择MIPS32是因为它最接近JVM)