Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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代码移植到C#_C#_Java_Porting - Fatal编程技术网

将Java代码移植到C#

将Java代码移植到C#,c#,java,porting,C#,Java,Porting,我需要创建一个将Java代码转换为C#的移植软件(反之亦然,但我会在后面研究)。该软件将针对精通一种语言但对另一种语言一无所知的人,以及如果您在一个平台上有一段非常好的源代码,并且希望在另一个平台上使用它而不必手动更改它的人 我知道已有类似的作品,但我需要自己创作(也是为了练习),我不确定如何开始。我曾考虑过制作一个C#项目,它将调用一个.Java源代码,然后逐行检查并将文本转换为C#的样子。示例:公共类Car将Vehicle{}更改扩展为公共类Car:Vehicle{},并继续更改两种语言之间

我需要创建一个将Java代码转换为C#的移植软件(反之亦然,但我会在后面研究)。该软件将针对精通一种语言但对另一种语言一无所知的人,以及如果您在一个平台上有一段非常好的源代码,并且希望在另一个平台上使用它而不必手动更改它的人

我知道已有类似的作品,但我需要自己创作(也是为了练习),我不确定如何开始。我曾考虑过制作一个C#项目,它将调用一个.Java源代码,然后逐行检查并将文本转换为C#的样子。示例:公共类Car将Vehicle{}更改扩展为公共类Car:Vehicle{},并继续更改两种语言之间的所有差异

这是正确的方法吗?还有其他方法吗


*注意:我已经找到了关于它的文章,我看到AST和解析出现了很多,还有一些解析器,比如NRefactory。有人能解释一下这些术语是如何与我的问题相关的,以及解析器(NRefactory)是如何工作的吗?这些定义给了我一个概述,但我仍然不确定我是否理解这个概念。

Java具有C#中不存在的功能,而C#具有Java中不存在的功能,因此简单的一对一对应转换是不可能的

看看你会从哪里开始遇到问题

解析器对于正确转换一种语言的语法是必要的,而另一种语言中不存在这种语法,所以您基本上需要构建一个非平凡项目的语法


编译器和解释器一样,都是基于语法解析器的。通过谷歌搜索,你可以在网上找到很多关于编译器构造的好教程和资源。例如,是一个很好的例子。

Java具有C语言中不存在的特性,而C语言具有Java语言中不存在的特性,因此简单的一对一对应转换是不可能的

看看你会从哪里开始遇到问题

解析器对于正确转换一种语言的语法是必要的,而另一种语言中不存在这种语法,所以您基本上需要构建一个非平凡项目的语法



编译器和解释器一样,都是基于语法解析器的。通过谷歌搜索,你可以在网上找到很多关于编译器构造的好教程和资源。例如,这是一个很好的例子。

这比仅仅移植语言语法和语义更难,您可以在Java中找到一些功能,但在.NET和viceversa中却缺少这些功能。有些人倾向于认为.NET是Java克隆,但实际上两者都是不同的怪物。。。无论如何,我很确定将Java移植到C#的最佳方式是直接使用两种平台的字节码。@MatíasFidemrAzer那么我该如何使用字节码在两者之间进行转换呢?我建议您这样做,因为如果您将代码移植到.NET,您也需要将其编译成字节码,我相信直接用一些Java解析器/解释器生成的字节码构建程序集应该更容易。。。但是你似乎想要一件几乎不可能的事情……你需要将Java源代码(文本)转换成C源代码(文本),还是还要生成字节码/执行代码?第一步是为提供AST所需的语法生成解析器。在用AST生成源代码(文本)时,生成字节代码变得更加复杂。我必须亲自深入研究同一主题,并在javacc和CoCo/R(许多编程语言的实现)方面积累了丰富的经验。如果我能转换源代码的文本类比,那就太好了。现在我的目标是实现这一点,因为如果我有源代码,我可以将其粘贴到编译器中(这不是最有效的方法,但现在我会感到满意)。这比只移植语言语法和语义更难,你可以在Java中找到一些功能,但在.NET和viceversa中却找不到。有些人倾向于认为.NET是Java克隆,但实际上两者都是不同的怪物。。。无论如何,我很确定将Java移植到C#的最佳方式是直接使用两种平台的字节码。@MatíasFidemrAzer那么我该如何使用字节码在两者之间进行转换呢?我建议您这样做,因为如果您将代码移植到.NET,您也需要将其编译成字节码,我相信直接用一些Java解析器/解释器生成的字节码构建程序集应该更容易。。。但是你似乎想要一件几乎不可能的事情……你需要将Java源代码(文本)转换成C源代码(文本),还是还要生成字节码/执行代码?第一步是为提供AST所需的语法生成解析器。在用AST生成源代码(文本)时,生成字节代码变得更加复杂。我必须亲自深入研究同一主题,并在javacc和CoCo/R(许多编程语言的实现)方面积累了丰富的经验。如果我能转换源代码的文本类比,那就太好了。现在我的目标是这样,因为如果我有源代码,我可以将其粘贴到编译器中(这不是最有效的方法,但现在我会满意的)。桌子的80%是绿色的。我不明白为什么我需要翻译。如果你说解析器是正确转换语法的工具,那么我最初计划做的就是解析器。如果解析器能够工作,我将拥有可工作的C#源代码,我可以将其复制粘贴到我的项目中。解析器返回一个解析树,您需要将其转换回源代码。如果我错了,请纠正我:Java源代码-->解析器-->转换为独立于语言的内容(解析树)--->解析(任何所需语言)?但什么是更深入的过程?我将Java源代码传递到解析器中。它和它有什么关系?怎么办