0

現在、作成したプログラミング言語用に flex、bison、および llvm (3.2) を使用してコンパイラを作成しようとしています。プログラマが C++ コードを挿入できるようにしたいと考えています。

例 :

//some code using my own language
extern
{
    int i = 42;
    // Other code..
    std::cout << "I'm here !" << std::endl;
}
//some other code using my own language

構文解析の後、AST に C++ コードを含むオブジェクトができました。IR コードに挿入するにはどうすればよいですか?

ボーナス:

私も次のようなことをしたい:

myInt i = 42; // myInt : 64bits
extern
{
    std::cout << i << std::endl;
}

これは可能ですか?

4

2 に答える 2

0

あなたがやろうとしていることは非常に複雑である可能性が高く、提案されたセマンティクスを慎重に検討する必要があります。C++ コードを生成する場合を除き、C++ コードのチャンクもコンパイルする必要があります。C++ のチャンクをコンパイルする最も簡単な方法はclang、ライブラリとして使用することです。C++ コードから LLVM IR を生成できます。しかし、その IR で何かリモートで役立つことを行うには、コンパイラが生成する実際の IRに関連付ける必要があります。これは、物事が任意に複雑になる可能性がある場所です。すべては、より厳格に定義されたセマンティクスに依存します。

于 2013-05-07T13:42:47.853 に答える