【问题标题】:Translating a language to another将一种语言翻译成另一种语言
【发布时间】:2014-11-04 02:39:34
【问题描述】:

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

真的有可能吗?如果两种语言中的一种不是图灵完备语言怎么办?

【问题讨论】:

  • 我认为这种概念性问题最好在cs.stackexchange.com提出
  • @HighPerformanceMark 不,那是针对理论计算机科学的。
  • 经过反思,我想是这样的。
  • 这个问题似乎跑题了,因为它是一个理论计算机科学问题,而不是一个编程问题。

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


【解决方案1】:

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

这是真的,因为您可以使用 XML 来表示任何具有树结构的东西,而 java 是隐式树结构的。

但是,您可以构建不正确的语言对,例如描述任意图的语言不能翻译成只能描述树的语言。

但是,如果我们谈论的是翻译编程语言,那么问题(正如您所确定的)是目标语言是否与源语言一样强大。如果(通常情况下)两种语言都已完成,这是给定的。但是,不能翻译例如每个 Java 程序都转为正则表达式。

【讨论】:

    【解决方案2】:

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

    在实践中,如果您拥有一门真正的编程语言,您可以编译任何语言到它,但您的属性可能会略有不同,这取决于转向完整性不考虑的因素。例如,如果您将 Haskell 编译为 python,您可能在并发程序上的运行时非常糟糕。在极端情况下,如果将任何普通语言编译为 lambda 演算,则无法进行 IO。

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 2014-12-27
      • 2012-06-26
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多