创建源代码转换器

时间:2011-08-22 10:43:07

标签: programming-languages compilation translation

我想知道创建源译者的策略是什么,即创建从一种高级语言到另一种高级语言的翻译。我想到的两种方式是

1-将一种语言的语法树更改为其他语言语法树 2-将其更改为中间语言,然后将其转换为其他高级语言

我的问题是,是否可以使用这两种策略进行转换,哪种更可行,任何人都可以参考某些转换器完成的任何理论或实现,如上述任何方法。有没有任何标准的基于xml的中间语言,我知道xmlvm使用xml作为中间语言,但它没有提供任何适当的中间语言规范。

4 个答案:

答案 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编译器基础结构。