我剛剛開始我的畢業計劃,應該持續6個月。 該項目的目標是爲一種腳本語言實現.Net編譯器。我將編譯器構造作爲課程中的一個主題,並且知道如何實現一般編譯器的基本步驟,但是我們使用Bison和簡單的GCC編譯器作爲後端,因此我不太瞭解如何實現編譯器在.Net平臺上。在C#中實現編譯器最有趣和最有前途的方法是什麼?
已經進行了一些研究,這個話題我發現代碼生成以下的替代解決方案(我不是在談論編譯器的其它關鍵部分,像一個解析器 - 它是超出範圍在這裏):
- 使用Reflection.Emit直接生成代碼。
- 對Reflection.Emit使用Common Compiler Interface抽象來自動生成一些代碼。
- 在運行時使用CodeDOM進行C#和VB編譯。
- 有一種新興的C#「編譯器作爲服務」,名爲Roslyn,現在可作爲CTP使用。
- DLR提供了動態代碼生成支持,並通過表達式樹等
- 單附帶Mono.Cecil庫似乎有代碼生成一些功能,以及對運行時代碼生成一些接口。
我的項目的主要目標是深入研究.Net的內容,學習編譯器構建以及爲我的工作取得好成績。次要目標是提出一個編譯器實現,稍後可以在寬鬆的開放源代碼許可下向社區開放。
那麼,這裏最有趣,最具教育性,最有趣和最有希望的方法是什麼?如果我有更多的時間,我肯定會嘗試所有這些,但我需要在6個月內提交我的工作以獲得正面評分...
在此先感謝您, Alexander。
請注意,Roslyn只是圍繞你的'1','2'和'3'的厚包裝。 – SLaks
@SLaks,我認爲Roslyn實際上並沒有使用CodeDOM(#3)。 – svick
我不確定那個。我懷疑你是對的。 – SLaks