algorithm - 自动将代码从一种表示形式转换为另一种表示形式?

标签 algorithm abstract-syntax-tree intermediate-language

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

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

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

最佳答案

您可以使用 a program transformation systemn (PTS) .

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

只有少数工具(全部在维基百科页面上)可以处理任意语言 ( parsing C++ is damn hard ) 或者足够健壮,可以让一个人实现任意复杂的转换,如果你从一个语言到另一个。

您可以尝试通过获取解析树并尝试自己实现其余部分来实现这一点。参见 Life After Parsing为什么这在实践中根本行不通。这些工具很难在实践中构建,这就是为什么它们不是很多。

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

关于algorithm - 自动将代码从一种表示形式转换为另一种表示形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48899793/

相关文章:

algorithm - 比较 BFS 算法的两种不同实现时了解性能细节

interpreter - AST解释器?

gcc - 如何将 gcc 生成的抽象语法树转储到 .dot 文件中?

groovy - Getter 和 Setter AST 转换

c# - 关于 C# 编译器如何发出 TypeRef 信息的问题

java - 是否可以使用分形来计算软件的复杂性?

algorithm - 跟踪商店中产品剩余库存的最佳设计是什么

algorithm - 一条直线上最近的一对点

c++ - LLVM 错误 : Found more than one landing-pad successor

C# 6 自动初始化属性和支持字段的使用