GCC
前回: http://d.hatena.ne.jp/shinichiro_h/20080803#1217701533GEM のこと見てたら plugin branch なんてあるんだなーと気付きました。 GEM 同様実装はすごい簡単で、要所要所で適当に dlopen した共有オブジェクトの関数呼ぶだけみたいです。技術的には全…
http://www.atdot.net/~ko1/diary/200807.html#d17こういうのはえーと GEM とかあったような(無論名前とか覚えてなかったけど)…ということで遊んでみました。 GEM って何かっていうと、まぁ GCC のそこらこちらに適当にフックがかけられるようになってるとか…
今までの知識を使って C 言語を勝手に拡張してみよう。 foreach ステートメントを導入する。以下のようなコードをコンパイルできるようにしたいわけだ。 /* foreach.c */ int main() { int i; char msg[] = "hello\n"; foreach (i; msg) { printf("%c", msg[…
前回の stmt は雑に飛ばしたのだが、少しやってみたいことがあるのでもう少し stmt に留まる。今回は for 文。 /* for_stmt.c */ int main() { int i; char msg[] = "hello\n"; for (i = 0; i このダンプでは、 compstmt は二つ出力される。 for 文の中身の…
さて、これもいきなりダンプから。少し飽きてきた感もある。 /* stmt.c */ int main() { char msg[] = "hello\n"; printf(msg); return 0; } やっと hello world が出てくるわけ。さて compstmt のダンプは、 compstmt = @1 compound_stmt line: 2 next: @2 …
次は declarator 。型に対して後置される修飾子がこちらに含まれるというのは前に述べた通り。その部分を無視すると、 '(' の後に parmlist_or_identifiers と来ている。 identifiers をいきなり書くのは K&R 記法で、普通は parmlist の方が来るのだろう。…
では declspecs ができるまで追ってみる。 declspecs_ts は declspecs_ts: declspecs_nosc_ts_nosa_noea | declspecs_nosc_ts_nosa_ea | declspecs_nosc_ts_sa_noea | declspecs_nosc_ts_sa_ea | declspecs_sc_ts_nosa_noea | declspecs_sc_ts_nosa_ea | dec…
init は飛ばして(@@@) 字句解析もつまらんから飛ばして (@@@) 、構文解析を見ていこうと思う。(*lang_hooks.parse_file) (set_yydebug); と呼ばれているフックの先は c_common_parse_file のようだ。 pch_init なんてのがあってさすが 3.4 と思った。 c_pars…
tree を作っていくコードを見ようと思ったが、 wo さんの記述に従い、先に langhooks* を見る。 langhooks.h で lang_hooks 構造体が定義されていて、その中にさらに lang_hook_for_functions などの特定目的のフックを収める構造体がいくつか。それらは同じ…
tree 型について理解できているか確認するために、 tree-dump.[hc] を読む。手頃なサイズだし。 queue に入れて dequeue_and_dump で dump するらしい。なんで queue になっているのかはとりあえず保留 (@@@) 。 dequeue_and_dump は大体思い描いていたよう…
かなり前の話ですが、読み始めようと思った動機の一つになったサイトです。私的には fontlist あたりで知った方なのですが、いろいろと勉強になりました。なめるように記録を全部読ませて頂いたりしました。http://morihyphen.hp.infoseek.co.jp/log/03_12.h…
GCC はすばらしい。地球が宇宙に誇れるソフトウェアだ…って前も書いたか。ということで 3.4.0 を読み始めました。今度こそ止めない。と思ったら西田さんが解析を始められたらしい。http://www.wnishida.com/~wmemo/?date=20040427#p04残念ながら、私が主に興…