将语言翻译成另一种语言

时间:2014-09-10 12:31:55

标签: compiler-construction language-agnostic programming-languages code-translation

我正在学习语言翻译(通常只是编译)。我们研究如何能够从一种语言翻译成另一种语言(比如Java到Python,但在我们的例子中是C语言到汇编语言)。我向老师询问了语言必须满足的条件才能进行翻译。答案是没有任何条件,我们可以从任何语言翻译成另一种语言(例如Java - > XML)。

真的有可能吗?如果两种语言中的一种不是Turing-complet语言怎么办?

2 个答案:

答案 0 :(得分:1)

  

答案是没有任何条件,我们可以从任何语言翻译成另一种语言(例如Java - > XML)。

在某种意义上,您可以使用XML来表示具有树结构的任何内容,而java是隐式树结构的。

但是,您可以构建成对的语言,但这不是真的,例如:描述任意图形的语言不能翻译成只能描述树木的语言。

但是,如果我们正在讨论翻译编程语言,那么问题(正如您已经确定的那样)是目标语言是否与源语言一样强大。在哪里(正常情况下)这两种语言都是完整的,这是给定的。但是,人们无法翻译,例如每个Java程序都是正则表达式。

答案 1 :(得分:0)

理论上,您可以将任何编程语言翻译成任何其他编程语言。但是,您提供的示例并不成立,因为XML不是一种编程语言。您当然可以将Java转换为XML语法,但该语言不具有任何语义。如果你愿意,你可以定义然后用XML语法为你的新Java语言编写一个字节码编译器。那不是XML。它是一种新的语言,XML的子集作为语法和Java的语义。

实际上,如果你有一个真正的编程语言,你可以编译任何语言,但你可能会根据转向完整性没有考虑到的东西略有不同的属性。例如,如果将Haskell编译为python,则并发程序上的运行时可能会非常糟糕。在极端情况下,如果您将任何正常语言编译为lambda演算,则无法执行IO。