开发者

Creating source to source translator

开发者 https://www.devze.com 2023-03-29 23:53 出处:网络
I want to know that what are the strategies to create a source to source translator i.e creating translation from one high level language to another. The two ways that come into my mind are

I want to know that what are the strategies to create a source to source translator i.e creating translation from one high level language to another. The two ways that come into my mind are

1- Changing syntax tree of one language to other language syntax tree 2- Changing it to intermediate language and then converting that to other high level language

My question is that is it possible to do the conversion using both strategies and which is more feasible to do, can anyone give some refernces to any theory or implementation done by some converter like any of above methods. And is there any standard xml based intermediate language, i know that xmlvm uses xml as 开发者_运维技巧intermediate language but it does not provide any proper specification of the intermediate language.


Any compiler is, roughly, a source-to-source translator. Target language can be an assembly language (or directly a binary machine code language), or C, or whatever high level language you fancy. So, the general compilers theory is applicable.

And just as a word of advice - one intermediate language is normally not nearly enough. Use more. Use dozens of intermediate languages, each different from a previous one in just one tiny aspect. This way any language-to-language translation is nothing but trivial.

Another word of advice (anticipating downvotes here) - stay away from XML, especially as a representation for ASTs.


I would look at LLVM, which can do source to source. Although the output isn't pretty, it might provide some good ideas.


The converters are usually based on constructing the semantic tree of one program and then re-shaping it to the target PL. As an example, take a look at C# to Java convertor.

The second approach is also possible, but the organization of your code may change completely after conversion. So, it is better to keep the intermediate common structure (IL, ST, etc), as high level as possible.


Try Clang! It is powerful for source-to-source translation. As of now it fully supports C, C++, Objective C and Objective C++. You may also want to look at ROSE compiler infrastructure.

0

精彩评论

暂无评论...
验证码 换一张
取 消