1:編譯器管道
2:語法分析
3:語義分析
4:代碼轉換
5:代碼重構
c#6開始用一個新的編譯器--Roslyn。最初,c#編譯器是用c++編寫的。現在,它的主要部分是用c#和.Net創建的。編譯器平台是開源的。
開源地址:https://github.com/dotnet/roslyn
新的編譯平台優點:使用c#實現新功能要容易得多,新代碼易於維護。
重寫c#編譯器的一個更大優勢是:現在可以利用編譯器管道,在編譯器管道的每一步添加功能,並分析和轉換源代碼。
一:編譯器管道
編譯器管道包括以下階段:
解析器--閱讀和標記化源代碼,然后將其解析為一個語法樹。語法樹API用於在源代碼編輯器中格式化、着色、列出大綱。
聲明--分析源代碼中的聲明和導入元數據,以創建符號。為這一階段提供了符號API.在編輯器和對象瀏覽器中的Navigation To特性使用這個API.
綁定--標識符匹配符號。為這一階段提供了綁定和流分析API。Find All References、 Rename、Quick Info和Extract Method等特性都使用這個API。
發布--創建IL代碼,發布一個程序集。發布API可用於創建程序集。編輯器中的Edit and Continue特性需要一個新的編譯,來利用發布階段。
根據編譯器管道,提供了編譯器API,例如 語法(Syntax)API、符號(Symbol)API、綁定和流分析(Binding and Analysis)API以及發布(Emit)API.
.Net編譯器平台還提供了一個API層,來利用另一個API:工作區Workspace API。工作區API 允許使用工作區、解決方案、項目和文檔。
VS中,一個解決方案可以包含多個項目,一個項目可以包含多個文檔。一個工作區可以包含多個解決方案。
所有用於.Net編譯器平台的樹是不可變的,不能更改。每次改變都會創建一個新樹。這就是為什么需要工作區這個概念--一個工作區可以包含多個解決方案。
二:語法分析
