Cベースの言語をGCCに追加するにはどうすればよいですか
-
03-07-2019 - |
質問
Cに独自の拡張機能を変更または追加し、GCC Cコンパイラに追加する場合、何をする必要がありますか?言語の変更を提案したくありません。Cコンパイラの実際の動作を知りたいです。
GCCのソースコードを見たところ、Objective-Cは、変更されたランタイムライブラリへの参照を作成するコードを生成する単純なパーサーとして実装されているように見えます。通常のCコンパイラを使用します。私はそれを熱心に研究したことがないので、おそらく正しい軌道に乗っていません。
たとえば、楽しみのために、Objective-Cに独自のキーワードを追加したいと考えました。 @assert
のように、実装しやすいと思われるものを追加したいと思います。必要なのは、 @assert
がObjective-Cランタイムに追加する関数を呼び出すことだけです:
objc_runtime_assert (__FILE__, __LINE__, expression, "string version of expression");
明らかに、とにかくこれを関数呼び出しとマクロとして実装することはできますが、Cソースコードの解析とコンパイルの段階を理解したいので、自分の使用する言語に独自の拡張機能を追加することができます。
私が見たソースコードは一貫して「ツリー」を指します。また、アクションを実行したり、これらのツリーから情報を取得したりするマクロが多数あります。
この種の詳細を説明するドキュメントはありますか?
解決
ツリーは抽象構文ツリー(AST)である可能性が高く、コンパイラーの本はすべて教えますそれ。 ドラゴンの本は非常に古典的なもので、私が受講したクラスではロビンハンター、ISBN 0-13-727835-7の The essence of compilers
を使用しました。また、いくつかの優れた検索語(コンパイラー設計、AST、字句解析、トップダウン解析、ボトムアップ解析、セマンティック分析、LL)を使用して、さまざまな大学の資料をトン見つけることができるはずです。 、LR)。
他のヒント
これは、コンパイラー全般に既に慣れているかどうかによって異なります。そうでない場合は、ドラゴンブックから始めます。はいの場合、GCCにはすでにいくつかのドキュメントがあります:
- GCC内部マニュアル
- GCC Wiki 、特に Getting Started ページには、GCCツリーを含む多くのものに関する情報が含まれています。
その方法によって異なりますが、Dプログラミング言語のGCC実装を探したい場合があります- GCD 。これは進行中の作業ですが、GCCチーム内からの認識があれば(まだ)ほとんどなく、GCCフレームワークに実装された完全な言語です。 GCDエクスペリエンスは有益な場合があります。