2010-10-04 103 views
33

我已經使用一些可用的各種分析工具創建了幾種不同的完整編程語言。但是,如何創建一個運行.Net框架的編程語言?我需要輸出.Net IL並編譯它,還是需要更高級別的抽象?如何創建.Net編程語言?

另外,有沒有一種簡單的方法來獲得在Visual Studio中工作的語言?

+2

您將輸出.NET IL。 .NET運行時會處理編譯和運行該代碼。不知道其他部分。 – 2010-10-04 17:47:28

+1

相似[資源學習如何創建一個編譯器解釋器爲網](http://stackoverflow.com/questions/1448643/resources-to-learn-how-to-編譯器 - 解釋器 - 網絡 - 框架) – nawfal 2014-07-21 13:02:04

回答

13

你會想看看Microsoft Research Common Compiler Infrastructure (CCI)項目。它提供了爲裝配生成元數據和MSIL所需的一切。調試.pdb文件對於讓你的語言進行起來非常重要。

有一個姊妹項目,CCI代碼模型和AST,也可能有用,取決於你有多遠。

+1

Roslyn是否已經棄用了它,還是它仍然相關? – 2014-10-11 23:16:09

+0

CCI有助於創建任何*語言,Roslyn只針對C#和VB.NET – 2014-10-11 23:34:06

6

您的編譯器負責將其獲取的代碼轉換爲ILCode。 ILCode是任何和所有.net語言編譯的通用語言。該代碼在運行時由JIT-Compiler解釋。當然,如果你用C#編寫編譯器,它可以依靠框架中的CodeDom類來實現它。

+1

請閱讀MSDN雜誌中關於在C#中爲給定語言實現編譯器的文章:http://msdn.microsoft.com/en-us/magazine /cc136756.aspx – 2010-10-04 17:58:38

+0

鏈接已死亡。這是一個archive.org快照:https://web.archive.org/web/20150111033016/http://msdn.microsoft.com/en-us/magazine/cc136756.aspx – IInspectable 2017-08-25 07:49:05

10

在C#中有一個LOLCode編譯器,可能是一個很好的起點。

http://code.google.com/p/lolcode-dot-net/

至於在Visual Studio中實施,有一個開源的視圖引擎叫做火花(http://www.sparkviewengine.com/)是做了一些工作,讓智能感知工作。背景是不同的,但教訓是一樣的,這很難,而且它不是一個很好的記錄過程。

+0

Spark的聲音很有趣。 :) – Telavian 2010-10-04 19:01:51

1

或者是否有更高級別的抽象?

只是要完成,你可以輸出C#或VB.NET。兩種編譯器都是運行時的一部分。

雖然這是一個「真正的」編譯器,但有爭議。

+3

編譯器是任何從一種形式轉換到另一種形式。 – Telavian 2010-10-04 19:03:21

2

將您自己的語言集成到Visual Studio中的一個很好的示例是Lua Language Support項目。

5

不知道這是否就是你要找的東西,但我had a Question on SO後,我創建了一個.net Compiler for Brainf**k作爲練習吧(Part 6包含實際的編譯器源代碼,也是on GitHub

從本質上講,實際編譯器可以用任何.net語言編寫,並使用命名空間來創建程序集,類,方法等,並將IL發送到它們中。

創建新語言的實際工作顯然涉及編寫一個解析器/詞法分析器/分析器/任何可以將您的程序解析爲類並「喂」你的編譯器的東西 - 抱歉,我沒有這方面的經驗,但請檢查this list of resources如何編寫一個編譯器。

你確實想閱讀ECMA-335瞭解CLI的工作原理:它支持哪些數據類型以及它實際執行什麼命令。