有没有办法将代码从一个高级表示转换为另一个?例如,在Javascript中,维护状态的一种流行方式是使用名为Redux的第三方库。另一方面,VueJS有自己的Redux版本,它有点相似但不同。有没有办法在两种表示形式之间自动转换?
我怀疑可能有使用AST的方法;然而,至少在JS中,AST似乎擅长低级变换,例如:const x = 2*4
到const x = 8
。然而(至少对于JS而言),像我上面描述的那样进行更高级别的转换似乎很痛苦。
如果没有现有解决方案,那么最新技术(即当前的研究论文等)是什么?
答案 0 :(得分:1)
您可以使用a program transformation systemn (PTS)。
这些工具可解析源代码,构建AST,并允许将转换应用于AST以生成不同的程序;当AST的转换完成时,PTS从AST重新生成源文本。
只有少数几种工具(都在维基百科页面上)可以处理任意语言(parsing C++ is damn hard),或者足够强大,可以实现任意复杂的转换,这是你真正需要的工具从一种语言到另一种语言。
您可以尝试通过获取解析树并尝试自己实现其余部分来实现此目的。请参阅Life After Parsing了解为何在实践中不起作用。这些是在实践中建立的硬工具,这就是为什么它们中的很多都没有。
即使您使用了更好的工具,构建严格的代码转换引擎也很昂贵。我这样做是为了谋生;在我们特定的PTS之上构建这样一个工具需要12-24个人月,我们已经花了20年的时间来完成这项任务。