2011-02-04 28 views
2

スクリプト言語をC、C++、またはJavaに変換できるので、コードを書き直すことなくIDE上で実行できますか?スクリプト言語を他の言語に翻訳できますか?

+3

はい、日本語は英語に翻訳することができることを同じように:http://javacc.java.net/

  • Cにbrainfuckをコンパイルする可能性もあります。それは些細なことではなく、その過程でいくつかの意味が失われるかもしれませんが、可能です。 –

  • +0

    基本的には?ほとんどのスクリプト言語はC言語で書かれているため、基になる言語には欠けている機能は得られません。実際に?言語やスクリプトのコンパイルが受け入れられるかどうかによって異なります。 – SpliFF

    +0

    Facebookから 'hiphop-php'を試す:https://github.com/facebook/hiphop-php –

    答えて

    5

    理論上、はい、任意のスクリプト言語をC、C++、またはJavaコードに変換することは可能です。これを行う理論的に有効な方法は、インタープリタのソースコードを取得し、実行するスクリプトのハードコードにすることです。結果のコードは、 "指定されたソースコードでC/C++/Javaで書かれたインタプリタを実行する"でしょう。

    実際には、通常、オリジナルのコーディングスタイルを維持する方法で、スクリプト言語から他のターゲット言語に翻訳する良い方法はありません。各言語には独自の構造、イディオム、特異性があり、ソーススクリプト言語からターゲット言語への翻訳では、元の構造の多くが失われます。つまり、パフォーマンス上の理由から、この種の変換を行うプロジェクトが数多くあります。たとえば、FacebookのHipHopコンパイラは、効率の理由からPHPをC++に変換します。結果のコードは人間が読むことを意図したものではありません。

    要するに、そうすることができますが、それはかなりのコードをもたらす方法ではありません。

    1

    理論上、可能です。スクリプティング言語とそれに対応する「仮想マシン」に応じて、これを(半)自動的に行うためのツールがあります。言語をより深く解釈するほど、コードを翻訳する可能性は低くなります(たとえば、HTML WebページをネイティブCに翻訳することは、MATLABコードをCまたはC++に変換するのではなくちょっとばかげています)。一般的に、コードを翻訳するための一般的なツールは、生成されるコードをコンパイルして実行することはほとんどできません。ほとんどの場合、構文変換のほとんどは(基本的に&を置き換えてください)しかし、ほとんどの場合、あなたは依然として重要な作業をしています(ウェブページをある言語から別の言語に翻訳するためにGoogle翻訳者を使用するなど、完璧ではなく、2つの言語がどれほど近いかによって異なります)。

    私の意見では、コードの翻訳は非常に危険なビジネスだと思います。少しだけ知っているコードを手動で書き直すときに、誤植やその他の間違いをする方がずっと簡単です。自動翻訳ツールは、その前部ではあまりうまく機能しません。そして、コードを翻訳したら、バグがあればどうしますか?どのようにそれらを見つけることになっていますか?それらを修正しますか?あなたが実際のコードについてほとんど知りません。これは非常に急速に悪夢のような経験になることがあります。私は過去にそれをやったことがありません。

    BTW:別の言語で書かれたプロジェクト内でスクリプト言語で書かれたコードを使用する場合は、あるコードを他の言語に翻訳するのではなく、その言語を使用することを検討してください。ほとんどのプログラミング言語およびスクリプト言語は、他の言語(例えば、DLLまたはCOM/ActiveXコンポーネント)とのインターフェースをとる機能を有する。可能であれば、元々書かれていた言語でコードを保存する方がよいでしょう。

    3

    PythonからC++への翻訳者の例については、shedskinをご覧ください。完璧ではありません。それは、どのようなコードを翻訳できるかにいくつかの制限があります。しかし、一般的にそれは動作します。

    この場合、主な理由は、他の既存のC++ソフトウェアとの統合のスピードと容易さです。

    0

    Cの場合、Cのように見えるスクリプト言語がいくつかありますが、これが出発点です。ルアは私の心に来る。

    Javaの場合、単純なJavaコードをスクリプトとして実行するbeanshell/bshというスクリプト言語があります。しかし、Javacodeを書き直すためには書き直さなければならないでしょうし、これを自動的に行うためには、プロセスがどれほど簡単かわかりません。

    別のアプローチは次のようなものです:Cインタプリタを書くことで、スクリプティングにCコードを使用し、必要なときにコンパイルするだけです。

    1

    Haxeというプログラミング言語があり、C++、Java、Javascript、C#などの言語に翻訳することができます。この言語は比較的最近登場し、可能な限り多くのターゲット言語に翻訳されるように設計されています。

    +0

    場合によっては、Haxeでソフトウェアライブラリを作成し、そのライブラリをさまざまなターゲット言語から使用することもできます。 http://stackoverflow.com/questions/4457962/would-haxe-work-for-creating-libraries –

    0

    あなたが望むものによって異なります。一般的には、任意の言語から構文ツリーを構築し、C/C++/Java /等で同等の構文を構築することができます。コードが超高速になるとは予想しないでください。なぜなら、コンパイルされているという理由だけでは、コードがさらに遅くなることがあるからです。ベース

    Javaバイトコード:ここ

    は、ソース - JITまたはソース - 実行ファイルを実行するいくつかのプロジェクトですあなたのJavaクラスを与えるが、あなたは、javaから呼び出すことができます。 ソースコードを取得するためにそれらを逆コンパイルすることもできますが、それはパフォーマンスには役立ちません。

    C++:C++コンパイラに

    関連する問題