2010-11-10 59 views
4

假設我爲其中一個託管代碼環境(.NET/JVM)設計了一種新的編程語言。我現在可以通過簡單地編寫將這種新語言的源代碼到平臺(C#/ Java的)的主要語言翻譯,然後讓該平臺的編譯器和其它工具處理過程的其餘部分實現它?有沒有簡單的概念證明,這種方法的例子?實現新的編程語言

+0

資源(詞法,語法分析,構建一個AST,如果你願意的話,等...):學習寫一個編譯器(HTTP:/ /stackoverflow.com/q/1669/2509)。 – dmckee 2010-11-10 00:48:17

回答

6

是的,你可以做到這一點,只要語義地圖正確(必須小心,例如,在映射JavaScript代碼的語言,如C#,因爲範圍的規則是不同的)。

這不是一個管理平臺上,但你可以看看Vala。它是一種類似C#的語言,編譯爲C. Eiffel也編譯爲C(並支持編譯爲Java)。

如果你是一個管理平臺上,然而,你可能想在看直接發射字節碼。 Java字節碼不難發出,因爲VM負責併爲更復雜的編譯部分(如管理堆棧幀)提供指令,並且VM消除了其他毛病如角色分配等問題。

1

是的,你當然可以這樣做。您將遇到的主要問題是,爲您的語言提供源級運行時診斷/調試很困難。

+1

這不像起初看起來那麼難。只需要有一個「調試」模式編譯,在新代碼執行時存儲原始行號。然後你只需要編寫一個簡單的調試器來捕獲頂級異常並輸出最後一個傳入的行標記。然後你可以看中它,並允許單步執行標記或將它們追蹤到日誌文件。與開發新語言的主要任務相比,我認爲這相對容易。 – JOTN 2010-11-10 01:16:36

1

當然,第一C++編譯器我用翻譯的代碼C,然後使用的系統編譯器和彙編以創建可執行文件。我相信它來自Sun,但它已經有一段時間了。真的,組裝C是做同樣的事情。

0

我建議2個步驟:

首先,請從您的語言翻譯或編譯器C#或Java。 其次,將轉換器轉換爲.NET代碼(CIL或MSIL)或Java字節碼。

(另一個編譯器&編程語言設計hobbyst)爲努力