我推薦Abdulaziz Ghuloum寫的一個關於實現Scheme編譯器的tutorial : Compilers: Backend to Frontend and Back to Front Again.
這個教程沒有完成。但是Abdulaziz Ghuloum還有一篇論文: An Incremental Approach to Compiler Construction 教你如何一步一步實現這個編譯器。這兩篇文章需要結合起來看。論文是一個整體的概述,而那個tutorial包含了一些細節。
學習這個tutorial只需要你有C和Scheme程式設計基礎,另外知道一點x86彙編即可。對於不會x86彙編的,看一下Computer Systems A Programmer"s Perspective 的第3章即可
如果你跟著這個tutorial一步一步走,你最終將得到一個把Scheme編譯到x86的編譯器。它擁有如下功能:
如果時間充裕,並且不怕麻煩的話,還可以把論文中第4節"Beyond the Basic Compiler"中的東西也實現。同時還可以加上GC和CPS transformation等等。
同時Github已經有一些實現了。比如: namin/inc 路 GitHub 這個是我見過的最好的。
我推薦Abdulaziz Ghuloum寫的一個關於實現Scheme編譯器的tutorial : Compilers: Backend to Frontend and Back to Front Again.
這個教程沒有完成。但是Abdulaziz Ghuloum還有一篇論文: An Incremental Approach to Compiler Construction 教你如何一步一步實現這個編譯器。這兩篇文章需要結合起來看。論文是一個整體的概述,而那個tutorial包含了一些細節。
學習這個tutorial只需要你有C和Scheme程式設計基礎,另外知道一點x86彙編即可。對於不會x86彙編的,看一下Computer Systems A Programmer"s Perspective 的第3章即可
如果你跟著這個tutorial一步一步走,你最終將得到一個把Scheme編譯到x86的編譯器。它擁有如下功能:
基本資料型別支援, 包括Integer, String, Symbol, Vector, 當然還有List.函式呼叫,包括Closure和Tail-call Optimization的實現。C函式呼叫... (論文中每一個章節就是一個feature)如果時間充裕,並且不怕麻煩的話,還可以把論文中第4節"Beyond the Basic Compiler"中的東西也實現。同時還可以加上GC和CPS transformation等等。
同時Github已經有一些實現了。比如: namin/inc 路 GitHub 這個是我見過的最好的。