【问题标题】:translate one language to another?将一种语言翻译成另一种语言?
【发布时间】:2011-01-04 12:58:27
【问题描述】:

是否可以使用口译员将一种语言翻译成另一种语言?

听说 quercus 可以将 php 翻译成 java?起初,我认为这是一个廉价的糟糕解决方案,可能会导致代码错误,但似乎完全有可能这样做。

你能把 php 翻译成其他语言,比如 python 或 ruby​​ 吗? c++转java等等?

【问题讨论】:

  • 查看我的stackoverflow.com/questions/3455456/… 回答,了解如何在不同语言之间进行翻译
  • 你可以有一个廉价的糟糕的解决方案,产生糟糕但有效的解决方案。作为一般规则,您无法轻松地在语言之间进行翻译,而且您无法使用糟糕的基础机器来做好工作。
  • 一个标准的错误答案是,“将原始语言翻译成对模拟原始语言语义的目标语言库的调用”;本质上,您正在构建口译员。你总是可以这样做;一台图灵机总是可以模仿另一台。但是这种翻译的结果通常很难读,不会像受过目标语言培训的维护人员所期望的那样使用目标语言,并且通常有很高的启动开销(所有这些模拟调用)。所以,你总是可以这样做,但你不应该这样做。

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


【解决方案1】:

将一种语言翻译成另一种语言只是编译器、解释器和翻译器类程序的一种特殊情况。

这类程序将接受一个通常可以用正式文法描述的输入符号流(“源代码”),并输出一个符号流。

符号的输出流可以是:

  • 本机汇编代码,通常用于机器运行的操作系统和硬件。如果是,则该程序称为编译器;
  • 不同操作系统和/或硬件的本机汇编代码。这也可以称为编译器,但通常称为交叉编译器;
  • 可以由某种虚拟机执行的中间形式。这不是一个真正的编译器,但通常被称为编译器。 Java、C#、F#、VB.NET 等“编译器”都属于这一类;
  • 完全改成另一种语言。这称为翻译器,有一些例子,比如 Java 到 C# 翻译器。它们通常取得不同程度的成功,因为成语通常不易翻译;
  • 解释器遵循相同的原则,但通常在原地执行处理后的表单,而不是将其保存在某处。 Perl、PHP 和 shell 脚本都属于这一类。例如,PHP 会将操作码作为中间形式存储在操作码缓存中(如果启用了操作码缓存),但不会存储此中间形式,因此将 PHP 称为解释器仍然是安全的。

【讨论】:

  • 有什么书、教程或例子可以推荐吗?即使是一个简单的
【解决方案2】:

当你的习语翻译得不好时,问题就出现了,无论是 from 还是 to。你得到的代码在语法上是有效的,但看起来像是由 acid 上的某个人编写的。

【讨论】:

  • 无法证明有多快或多好,但可以肯定。
  • 这为 ACID 测试赋予了全新的意义!
【解决方案3】:

在 SO 中搜索“transpiler”以获得一些指针:https://stackoverflow.com/search?q=transpiler

【讨论】:

  • +1,以前从未听说过术语转换器。听起来很老套,但了解一下很有用。
  • -1,我一直在构建翻译工具,每当您听到诸如“转译器”或“转码器”之类的怪异术语而不仅仅是“翻译器”时,答案本身就是怪异的,不是如果可以的话,这并不是一个很好的解决方案。我看过的那些实际上会产生答案,但前提是您的答案是指“翻译并运行并且是维护的彻头彻尾的噩梦”。请参阅有关产生 JOBOL 的 NACA 的讨论:stackoverflow.com/questions/1029974/…
  • 对不起,这不是你的教育;这学期我的老师教了我。
【解决方案4】:

这可能不是您所追求的,但有 SWIG http://en.wikipedia.org/wiki/SWIG

我们在我们的一个项目中使用它来为 C++ 框架创建 python、java 和 ruby​​ 绑定/包装器。在http://marsyas.sness.net查看它的实际应用

【讨论】:

  • 我不太明白...用简单的英语做什么?
猜你喜欢
  • 2014-11-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
相关资源
最近更新 更多