zoukankan      html  css  js  c++  java
  • 【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编译器平台的树是不可变的,不能更改。每次改变都会创建一个新树。这就是为什么需要工作区这个概念--一个工作区可以包含多个解决方案。

    二:语法分析

  • 相关阅读:
    CCF总结
    句柄的定义
    ubuntu16.04下安装和使用Kdevelop的技巧
    找不到ros相关包的解决方法
    用kdevelop构建ROS程序包
    Linux给软件添加卓面快捷方式
    工程代码结构说明——哈工大编译原理课程(五)
    符号表管理——哈工大编译原理课程(四)
    语义分析和中间代码生成——哈工大编译原理课程(三)
    语法分析器——哈工大编译原理课程(二)
  • 原文地址:https://www.cnblogs.com/SignX/p/11630670.html
Copyright © 2011-2022 走看看