假設我爲其中一個託管代碼環境(.NET/JVM)設計了一種新的編程語言。我現在可以通過簡單地編寫將這種新語言的源代碼到平臺(C#/ Java的)的主要語言翻譯,然後讓該平臺的編譯器和其它工具處理過程的其餘部分實現它?有沒有簡單的概念證明,這種方法的例子?實現新的編程語言
實現新的編程語言
回答
是的,你可以做到這一點,只要語義地圖正確(必須小心,例如,在映射JavaScript代碼的語言,如C#,因爲範圍的規則是不同的)。
這不是一個管理平臺上,但你可以看看Vala。它是一種類似C#的語言,編譯爲C. Eiffel也編譯爲C(並支持編譯爲Java)。
如果你是一個管理平臺上,然而,你可能想在看直接發射字節碼。 Java字節碼不難發出,因爲VM負責併爲更復雜的編譯部分(如管理堆棧幀)提供指令,並且VM消除了其他毛病如角色分配等問題。
是的,你當然可以這樣做。您將遇到的主要問題是,爲您的語言提供源級運行時診斷/調試很困難。
這不像起初看起來那麼難。只需要有一個「調試」模式編譯,在新代碼執行時存儲原始行號。然後你只需要編寫一個簡單的調試器來捕獲頂級異常並輸出最後一個傳入的行標記。然後你可以看中它,並允許單步執行標記或將它們追蹤到日誌文件。與開發新語言的主要任務相比,我認爲這相對容易。 – JOTN 2010-11-10 01:16:36
當然,第一C++編譯器我用翻譯的代碼C,然後使用的系統編譯器和彙編以創建可執行文件。我相信它來自Sun,但它已經有一段時間了。真的,組裝C是做同樣的事情。
我不知道這是否是一個很好的例子與否:http://www.mozilla.org/rhino/jsc.html
我建議2個步驟:
首先,請從您的語言翻譯或編譯器C#或Java。 其次,將轉換器轉換爲.NET代碼(CIL或MSIL)或Java字節碼。
(另一個編譯器&編程語言設計hobbyst)爲努力
- 1. 以新的編程語言實現xunit
- 2. 徽標編程語言的實現
- 3. 如何實現中去編程語言
- 4. 俄語編程語言「Rapira」的現代實現?
- 5. Osek實現語言
- 6. 使用不同的GPL(通用編程語言)實現的DSL(域特定編程語言)
- 7. 編程語言
- 8. 在現實世界中的D編程語言?
- 9. 編程語言的原語
- 10. 編寫的編程語言
- 11. Swift編程語言枚舉實驗
- 12. 如何通過編程語言實現異常處理?
- 13. 如何爲編程語言實現自動完成器
- 14. 你將如何實現一個函數式編程語言?
- 15. 如何實現使用Java作爲編程語言
- 16. 如何設計和實現編程語言?
- 17. 如何以lc3彙編語言實現PRINT子程序?
- 18. 在解釋性編程語言中實現函數
- 19. 可以用相同的語言L來實現語言L的編譯器嗎?
- 20. 語言在Apache Solr實現
- 21. 實現多語言PHP
- 22. 實現語言選擇器
- 23. 編程語言C
- 24. NesC編程語言
- 25. C編程語言
- 26. Siri編程語言
- 27. .NET編程語言
- 28. R語言編程
- 29. SIMD編程語言
- 30. Scheme編程語言
資源(詞法,語法分析,構建一個AST,如果你願意的話,等...):學習寫一個編譯器(HTTP:/ /stackoverflow.com/q/1669/2509)。 – dmckee 2010-11-10 00:48:17