Compiler construction 将一种语言翻译成另一种语言

Compiler construction 将一种语言翻译成另一种语言,compiler-construction,language-agnostic,programming-languages,code-translation,Compiler Construction,Language Agnostic,Programming Languages,Code Translation,我在学习语言的翻译(通常只是编译)。我们研究如何将一种语言翻译成另一种语言(比如说Java到Python,但在我们的例子中是C到汇编语言)。我问我的老师,语言必须满足什么条件才能进行翻译。答案是没有任何条件,我们可以从任何语言转换为另一种语言(例如Java-->XML) 这真的有可能吗?如果这两种语言中有一种不是图灵完全语言呢?理论上,您可以将任何编程语言翻译成任何其他编程语言。但是,您给出的示例并不成立,因为XML不是一种编程语言。您当然可以将Java翻译成XML语法,但该语言没有任何语义。如

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


这真的有可能吗?如果这两种语言中有一种不是图灵完全语言呢?

理论上,您可以将任何编程语言翻译成任何其他编程语言。但是,您给出的示例并不成立,因为XML不是一种编程语言。您当然可以将Java翻译成XML语法,但该语言没有任何语义。如果您愿意,您可以使用XML语法为新的类Java语言定义并编写一个字节码编译器。但这不是XML。这将是一种新的语言,它的语法和Java的语义都是XML的子集

在实践中,如果您有一种真正的编程语言,您可以将任何语言编译成它,但是您可能会有一些基于转换完整性所不能解释的事情的稍微不同的属性。例如,如果将Haskell编译为python,那么并发程序的运行时可能非常糟糕。在极端情况下,如果将任何普通语言编译为lambda演算,则无法执行IO

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

这是正确的,因为您可以使用XML来表示具有树结构的任何内容,而java是隐式树结构的

但是,您可以在不正确的情况下构造语言对,例如,描述任意图形的语言不能转换为只能描述树的语言


然而,如果我们谈论的是翻译编程语言,那么问题(正如您所指出的)是目标语言是否与源语言一样强大。其中(正常情况下)两种语言都是图灵完备的,这是给定的。但是,我们无法将每个Java程序翻译成正则表达式。

我认为最好在@HighPerformanceMark No中提出这类概念性问题,即理论计算机科学。经过思考,我想是的。这个问题似乎离题了,因为它是一个理论上的计算机科学问题,而不是一个编程问题。