我給自己設定了一個挑戰:在 10 小時內編寫一個自架 C 編譯器。這就是結果,加上大量的清理工作(檢查 10 小時版本的“releases”)。
執行:
語言:
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
。然後它透過用cc
編譯 mini-c 來產生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 上,您可能需要sudo apt-get install gcc-multilib
才能編譯和執行 32 位元程式碼。
另一個微觀 C 編譯器是rswier
的 c4。他實現了更多的 C,但我想說我的更簡單:)。此外,c4 為其自己的 VM 產生程式碼,而我的 VM 在使用 x86 彙編和 cdecl 方面存在很大困難。
我寫了另一個更高級的 C 編譯器。一探究竟。它也是自架的,但具有更完整的功能集,甚至還添加了一些實驗性的內容,例如 lambda。
版權所有 (c) 2015 薩姆·尼普斯
特此免費授予任何獲得本軟體和相關文件文件(「軟體」)副本的人不受限制地使用本軟體,包括但不限於使用、複製、修改、合併的權利、發布、分發、再授權和/或銷售軟體的副本,並允許向其提供軟體的人員這樣做,但須滿足以下條件:
上述版權聲明和本授權聲明應包含在本軟體的所有副本或主要部分中。
本軟體以「現況」提供,不提供任何明示或暗示的保證,包括但不限於適銷性、特定用途的適用性和不侵權的保證。 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE軟體.