4

独自の拡張機能を C に変更または追加し、それらを GCC C コンパイラに追加したい場合、何をする必要がありますか? 言語の変更を提案したくはありません。C コンパイラが実際にどのように機能するかを知りたいのです。

私はGCCのソースコードを見てきました.Objective-Cは、変更されたランタイムライブラリを参照するコードを生成する単純なパーサーとして実装されているように見えます.Cベースのすべてのものに対して、通常のC コンパイラ。私はそれを熱心に研究していないので、おそらく正しい軌道に乗っていません。

たとえば、自分のキーワードを Objective-C に追加したいとします。多分のように、実装しやすいと思われるものを追加したいと思い@assertます。私が望むのは@assert、Objective-C ランタイムに追加する関数を呼び出すことだけです。

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

明らかに、これを関数呼び出しとマクロとして実装することもできますが、C ソース コードの解析とコンパイルの段階を理解したいので、言語に独自の拡張機能を追加して、自分で使用できるようにしたいと考えています。

私が一貫して見てきたソース コードは「ツリー」を参照しており、アクションを実行したり、これらのツリーから情報を取得したりするマクロは非常に多くあります。

この種のことを詳細に説明しているドキュメントはありますか?

4

3 に答える 3

3

ツリーは抽象構文ツリー (AST)である可能性が高く、どのコンパイラの本でもそれを教えています。ドラゴンの本は非常に古典的なもので、私が受講したクラスではThe essence of compilersロビン・ハンター (ISBN 0-13-727835-7) が使用していました。また、いくつかの優れた検索用語 (コンパイラ設計、AST、字句解析、トップダウン解析、ボトムアップ解析、セマンティック解析、LL、LR) を使用して、さまざまなカレッジや大学から大量の資料を見つけることができるはずです。

于 2009-05-01T11:35:27.303 に答える
3

それは、一般的なコンパイラに既に精通しているかどうかによって異なります。そうでない場合は、ドラゴンブックから始めます。はいの場合、GCC にはすでにいくつかのドキュメントがあります。

  1. GCC 内部マニュアル
  2. GCC Wiki、特にGetting Startedページには、GCC ツリーを含む多くの情報が含まれています。
于 2009-05-01T18:51:30.657 に答える
1

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

于 2009-05-01T12:29:47.737 に答える