私は自分自身に、セルフホスティング C コンパイラを 10 時間で書くという課題を設定しました。これは、多くのクリーンアップを加えた結果です (10 時間バージョンについては「リリース」を確認してください)。
実装:
言語:
if
、 while
、 do``while
、 return
。=
、 ?:
(三項)、 ||
、 &&
、 ==
、 !=
、 <
、 >=
、 +
、 -
、 *
、 ++
、 --
(ポストオペレーション)、 !
、 -
(単項)、 []
、 ()
true
およびfalse
リテラル。自動連結を備えた文字列リテラル。一般的な哲学は、総コード サイズを削減する場合にのみ機能を含めるというものでした。これはinsane
ブランチで極端に行われます。
git clone http://github.com/Fedjmike/mini-c
cd mini-c
make selftest
これは、まず GCC で mini-c をコンパイルしてcc
生成します。次に、 mini-c をcc
でコンパイルしてccself
作成します。最後にccself
を使ってtest/triangular
作成し、結果を確認します。次のようなものが得られるはずです。
$ make selftest
gcc -std=c11 -Werror -Wall cc.c -o cc
cc cc.c
gcc -m32 a.s -o ccself
ccself tests/triangular.c
gcc -m32 a.s -o triangular; triangular 5; [ $? -eq 15 ]
Windows を使用している場合は、 windows
ブランチをチェックアウトする必要があります。 64 ビット Linux では、32 ビット コードをコンパイルして実行できるようにするにはsudo apt-get install gcc-multilib
必要になる場合があります。
もう 1 つの微細な C コンパイラはrswier
による c4 です。彼はより多くの C を実装しましたが、私のものはもっと単純だと思います :)。また、c4 は独自の VM 用のコードを生成しますが、私の場合は x86 アセンブリと cdecl を操作するのが非常に困難です。
私は別の、より高度な C コンパイラを作成しました。それをチェックしてください。これも自己ホスト型ですが、より完全な機能セットがあり、ラムダなどの実験的な追加機能も備えています。
著作権 (c) 2015 サム・ニップス
本ソフトウェアおよび関連ドキュメント ファイル (以下「ソフトウェア」) のコピーを入手した人には、使用、コピー、変更、マージする権利を含むがこれらに限定されない、制限なくソフトウェアを取り扱う許可が、ここに無償で与えられます。 、以下の条件を条件として、本ソフトウェアのコピーを出版、配布、サブライセンス、および/または販売すること、および本ソフトウェアが提供される人物にそれを許可すること。
上記の著作権表示およびこの許可通知は、ソフトウェアのすべてのコピーまたは主要部分に含まれるものとします。
ソフトウェアは「現状のまま」提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、いかなる種類の保証も行われません。いかなる場合においても、作者または著作権所有者は、契約行為、不法行為、またはその他の行為であるかどうかにかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因または関連して生じる、いかなる請求、損害、またはその他の責任に対しても責任を負わないものとします。ソフトウェア。