【c#基礎】.Net編譯器平台


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編譯器平台的樹是不可變的,不能更改。每次改變都會創建一個新樹。這就是為什么需要工作區這個概念--一個工作區可以包含多個解決方案。

二:語法分析

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM