2011-08-22 28 views
7

ソース翻訳元を作成する戦略、つまり、ある高水準言語から別の翻訳先への翻訳を作成する方法は何ですか?私の心に入って来る二つの方法は、他の言語の構文木 2 - 1つの言語の構文木を変更翻訳元から翻訳元へ翻訳者を作成する

1-中間言語にそれを変更してから

他の高レベル言語への私の質問であることを変換していますそれは両方の戦略を使用して変換を行うことが可能であり、実行するのがより可能です。誰も上記の方法のようないくつかのコンバータによって行われた理論や実装を参考にすることができます。そして、標準的なXMLベースの中間言語はありますが、xmlvmはxmlを中間言語として使用しますが、中間言語の適切な仕様は提供していません。

+0

プログラミング言語間の翻訳に関する私の答えを参照してください:http://stackoverflow.com/a/3460977/120163。それは理論ではなく、これを行うための真の工業的ツールに関するものです。 –

答えて

7

コンパイラは、おおよそ、ソースからソースへのトランスレータです。ターゲット言語は、アセンブリ言語(または直接バイナリのマシンコード言語)、またはC、またはあなたが気に入っている高水準言語にすることができます。したがって、compilers theory一般が該当します。

ちょうど助言の言葉 - 1つの中間言語では、通常は十分ではありません。より多くを使用してください。わずか1つの小さな面で、それぞれ前のものとは異なる数十の中間言語を使用します。このようにして、あらゆる言語から言語への翻訳は簡単です。

もう1つのアドバイスがあります(ここでの下落を予期しています)。特に、ASTの表現としてXMLから離れてください。

+2

XMLに関するSK-logicに同意します。 AST表現としてのXMLのメリットについては、http://stackoverflow.com/a/2831343/120163を参照してください。 –

0

コンバータは通常、1つのプログラムのセマンティックツリーを構築し、それをターゲットPLに再整形することに基づいています。例として、C# to Java convertorをご覧ください。

第2のアプローチも可能ですが、コードの構成は変換後に完全に変更される可能性があります。したがって、中間共通構造(IL、STなど)を可能な限り高いレベルに保つ方が良いです。

2

ソースをソースにすることができるLLVMを見ていきます。出力はきれいではありませんが、良いアイデアが得られるかもしれません。

+1

ソースからソースをどのような言語にすることができますか?私はLLVM/ClangがCやC++にかなり固定されていると思うし、他の言語はかなり難しいと思われる。 –

+0

@Ira Baxter:LLVMには、LLVM BitCodeをCにコンパイルするCBackendがあります。LLVMにはemscriptenという名前のJavaScriptバックエンドプロジェクトもあります。技術的には、LLVMに出力するフロントエンドはいずれもバックエンドを使用できます。これは、開発中のプロジェクト、または開発中のプロジェクトを考慮しない。フロントエンドの例はClang、llvm-lua、llvm-gcc、LDC ...などです。これは「完全な解決策」ではありませんが、誰かがいくつかのアイデアに取り組んでいて実際に見たいコードが必要だった場合、開始。 – TechZilla

0

Try Clang!ソースからソースへの変換には強力です。現在、C、C++、Objective C、Objective C++を完全にサポートしています。 ROSEコンパイラインフラストラクチャを参照することもできます。