1

有没有办法将代码从一种高级表示转换为另一种?例如,在 Javascript 中,一种流行的维护状态的方法是使用名为 Redux 的第三方库。另一方面,VueJS 有自己的 Redux 版本,有点相似但又有所不同。有没有办法在两种表示之间自动转换?

我怀疑可能有一种使用 AST 的方法;然而,至少在 JS 中,AST 似乎擅长低级转换,例如:const x = 2*4const x = 8. 然而(同样,至少对于 JS 而言),像我上面描述的那样进行更高级别的转换似乎很痛苦。

如果没有现成的解决方案,最先进的技术是什么(即当前的研究论文等)?

4

1 回答 1

1

您可以使用程序转换系统 (PTS)

这些是解析源代码、构建 AST 并允许将转换应用于 AST 以生成不同程序的工具;当 AST 的转换完成时,PTS 从 AST 重新生成源文本。

只有少数工具(都在那个 Wikipedia 页面上)可以处理任意语言(解析 C++ 太难了)或者足够强大,可以让一个实现任意复杂的转换,如果你从一种语言开始,这是你真正需要的给另一个。

您可以尝试通过获取解析树并尝试自己实现其余部分来做到这一点。请参阅 解析后的生活,了解为什么这在实践中根本行不通。这些是在实践中很难构建的工具,这就是为什么它们不是很多的原因。

即使您使用更好的工具,构建一个严肃的代码翻译引擎也是昂贵的。我以此为生;在我们特定的 PTS 之上构建这样一个工具需要我们 12 到 24 个人工月,我们已经花了 20 年的时间来调整此类任务。

于 2018-02-21T08:43:00.950 回答