有没有办法把代码从一个高级表示转换成另一个高级表示例如,在javascript中,一种流行的状态维护方法是使用第三方库redux。另一方面,VueJS有自己的Redux版本,它有点相似但不同有没有办法在这两种表示之间自动转换?
我怀疑可能有一种使用ast的方法;但是,至少在js中,ast似乎擅长低级转换,例如:const x = 2*4
到const 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年的时间来为这类任务进行调试。