2009-05-01 13 views
3

にCベースの言語を追加することができますか?私は言語の変更を提案したくないので、Cコンパイラの実際の動作を知りたい。は、どのように私は私が変更または追加Cに私自身の拡張をし、GCC Cコンパイラにそれらを追加したい場合は、私が何をすべきかが必要になりますGCC

私はGCCのソースコードを見てきました。Objective-Cが、修正されたランタイムライブラリへの参照を作成するコードを生成する単純なパーサとして実装されているように見えます。通常のCコンパイラを使用します。私はそれを強く勉強していないので、私はおそらく正しい軌道にはない。

言ってやる例えば、私はちょうど楽しみのために、Objective-Cのに自分のキーワードを追加したいです。多分@assertのように、実装が簡単なものを追加したいと思います。私が欲しいのは、私はObjective-Cランタイムに追加する関数を呼び出すこと@assertためのものです:

objc_runtime_assert (__FILE__, __LINE__, expression, "string version of expression"); 
明らか

私はとにかく関数呼び出しとマクロとしてこれを実装することができますが、私はの理解を得るためにしたいですCソースコードの解析とコンパイルの段階であり、多分私自身の拡張のために自分自身の拡張を言語に追加することができます。

私が一貫して見ているソースコードは、「木」を意味し、アクションを実行したり、これらの木から情報を取得する多くの、多くのマクロがあります。

この種のことを説明するドキュメントがありますか?

+0

私はあなたを助けていますが、特にObjective-Cのために、コンパイラをハックしたい場合は、LLVMをチェックアウトする必要がありますhttp://en.wikipedia.org/wiki/Abstract_syntax_tree –

+5

を見ることができません。 AppleがLLVMに移行した理由の1つは、GCCよりも変更と拡張がはるかに簡単で、コードベースがはるかに洗練されていることです。 – user57368

答えて

2

木がabstract syntax trees (AST)可能性が高いですし、任意のコンパイラの本はそれをお教えします。 The dragon bookは非常に古典的なものですが、私が取ったクラスでは、Robin HunterのThe essence of compilers、ISBN 0-13-727835-7を使用しました。あなたはまた、いくつかの良い検索用語と異なるカレッジや大学からの材料のトンを見つけることができるはずです(コンパイラの設計、AST、字句解析、構文解析をトップダウン、ボトムアップ構文解析、意味解析、LL、LR)。

1

それはあなたがそれをやっている方法によって異なります - しかし、あなたは、Dプログラミング言語のGCCの実装を探すのが好きかもしれません - GCD。これは進行中の作業ですが、GCCフレームワークで実装された完全な言語です(まだ)GCCチーム内からの認識があればそれほどです。 GCDの経験は有益かもしれません。

2

一般的にコンパイラに精通しているかどうかによって異なります。そうでない場合は、Dragon Bookから始めてください。 yesの場合、GCCはすでにあなたのためにいくつかのドキュメントがあります。

  1. The GCC Internals Manual
  2. GCC Wikiを、具体的には、Getting Startedページには、多くのことに関する情報が含まれ、GCCの木が含まれています。
関連する問題