我想知道创建源译者的策略是什么,即创建从一种高级语言到另一种高级语言的翻译。我想到的两种方式是
1-将一种语言的语法树更改为其他语言语法树 2-将其更改为中间语言,然后将其转换为其他高级语言
我的问题是,是否可以使用这两种策略进行转换,哪种更可行,任何人都可以参考某些转换器完成的任何理论或实现,如上述任何方法。有没有任何标准的基于xml的中间语言,我知道xmlvm使用xml作为中间语言,但它没有提供任何适当的中间语言规范。
答案 0 :(得分:8)
任何编译器大致都是源到源的翻译器。目标语言可以是汇编语言(或直接二进制机器代码语言),或C,或您喜欢的任何高级语言。因此,一般compilers theory适用。
就像建议一样 - 一种中间语言通常不够。使用更多。使用几十种中间语言,每种中间语言只有一个微小方面,与前一种语言不同。这样,任何语言到语言的翻译都不过是微不足道的。
另一个建议(预期在这里投票) - 远离XML,特别是作为AST的表示。
答案 1 :(得分:2)
我会看一下LLVM,它可以做源代码来源。虽然输出不是很好,但它可能会提供一些好主意。
答案 2 :(得分:0)
转换器通常基于构建一个程序的语义树,然后将其重新整形为目标PL。举个例子,看一下C# to Java convertor。
第二种方法也是可行的,但转换后代码的组织可能会完全改变。因此,最好将中间公共结构(IL,ST等)保持在尽可能高的水平。
答案 3 :(得分:0)
尝试Clang!它对于源到源的翻译很有用。截至目前,它完全支持C,C ++,Objective C和Objective C ++。 您可能还想查看ROSE编译器基础结构。