コンパイラの仕組みについては学生時代に学んだ記憶はあるのですが、当時は難易度が高く思えて、今となっては字句解析して構文解析してという程度しか理解できていません。これまで何度も学び直しをしようと思ったもののハードルが高くて何度も跳ね返されてきました。
ひょんなことで、「低レイヤを知りたい人のためのCコンパイラ作成入門」を知ったのですが、読み始めるととても分かりやすくて、面白くて、また学んでみようかなと思えてきました。読みながら、実際に手を動かして作っているのですが、このオンラインブックは執筆中ということもあり、そのままでは動かない部分がありましたので、自分なりに動くように作成してみました。
以下は、「ステップ4:四則演算のできる言語の作成」までの内容です。おかしな記述などがあれば遠慮なくご指摘いただければと思います。
9cc.c
実行結果
$ make cc 9cc.c -o 9cc $ make test ./test.sh OK
先ごろ実施された「平成30年度秋季基本情報午後問8 - Mae向きなブログ」にも四則演算を行う問題が出題されていました。今回の方法と実行結果が同じになっています。当たり前といえば当たり前なのですが、うれしいですね。
$ ./9cc 2*(34-(5+67)/8) > tmp.s $ gcc -o tmp tmp.s $ ./tmp $ echo $? 50