`
cdragon
  • 浏览: 78327 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

effective hierarchy(一) 之基本概念(1)

阅读更多

我告诫自己,不要忽略简单的东西,又要扎实。所以这一篇开始,专门来研究下C#基本概念。

 

MSDN: 词法结构(lexical structure)

 

程序(program)

C#程序包含了一个或多个源文件,叫做编译单元。源文件是由有序的统一字符(Unicode)序列组成。源文件与文件系统中的文件一一对应,但这种对应不是必须的。如果考虑便携(portability)最大化,建议使用UTF-8编码。

 

从概念上讲,程序使用三个步骤进行编译:

 

一、转换(transformation),把文件从一个特定的字符指令集和编码大纲(encoding scheme)转换成unicode字符序列;

 

二、词法分析(lexical analysis),把流式Unicode输入字符翻译成流式标记(token);

 

    1.C#源文件的词法结构五种基本元素构成,即行结束符、空白、注释、标记(token)和预处理指令:标记在程序的句法语法(syntactic grammar)中有重要意义;结束符、空白、注释用于分隔标记(separate tokens),预处理指令跳过源文件的节(section);

   

        (1)行结束符包括回车符(carriage return)、换行符(line feed)、回车换行符、行分隔符(line separator)、段分隔符(paragraph separator)

 

        (2)空白包括任何含unicode Zs类的字符、水平及垂直制表符(tab)、换页符(form feed)

 

        (3)注释包括单行注释和定界注释(delimited);注释不能嵌套;在字符和字符串文本内不处理注释;

 

        (4)标记包括标识符(identifier)、关键字、文本(literal)、运算符(operator)和标点:

 

          a.关键字

abstract as base bool break byte case
catch char checked class const continue decimal
default delegate do double else enum event
explicit extern false finally fixed float for
foreach goto if implicit in int interface
internal is lock long namespace new null
object operator out override params private protected
public readonly ref return sbyte sealed short
sizeof stackalloc static string struct switch this
throw true try typeof uint ulong unchecked
unsafe ushort using virtual void volatile while

 

          b.文本,值的源代码表现,如布尔、字符、字符串、空、整数、实数

 

          c.运算符和标点

                 {      }      [       ]        (       )       .       ,      :       ;

       +      -      *       /       %      &       |       ^      !       ~

       =      <     >       ?      ++      --      &&      ||      <<      >>

       ==   !=    <=      >=      +=    -=     *=      /=      %=      &=

       |=    ^=    <<=   >>=   ->  

 

        (5)预处理器指令,提供按条件跳过源代码的节、报告错误和警告条件,以及分界源代码不同区域的能力

 

              a. #define和#undef,分别用于定义和取消定义有条件编译符号

              #if、#elif、#else和#endif,用于有条件跳过源代码的节(section) 

                  #line,用于控制产生错误和警告信息的行号

              #error和#warning,用于发布错误和警告

              #region和#endregion,用于显式标记源代码的节

 

              b.预处理指令总是占用源代码中单独的一行,并且以#符号开始,附以预处理器指令名

 

              c.#字符前及#与指令间可以有空字符

 

              d.包含#define, #undef, #if, #elif, #else, #endif, 或#line 的源代码行可以用单行注释结束,但不能使用/*..*/

 

              e.预处理指令既不是标记,也非句法语法的一部分,但可以用来包括或排除标记(token)序列,且以此影响程序的含义

  

//以下两者词法(语法)虽不同,但句法(语法)相同
#define A
#undef B
class C
{
#if A
   void F() {}
#else
   void G() {}
#endif
#if B
   void H() {}
#else
   void I() {}
#endif
}

class C
{
   void F() {}
   void I() {}
}

 

 2.c#源文件的词法处理就是把文件缩并为标记序列,作为词法分析的输入(input);除此之外,这些词法元素对句法结构没有影响。

 

 3.当多个词法语法生成(production)都能匹配一个源文件中的字符序列时,C#不会产生歧义,这是因为词法语法总是优先构成尽可能最长的词法元素。如'//'字符序列被作为单行注释的开始来处理,因为它的长度比单一的'/'指令标记要长(longer than a single / token)。

 

三、句法分析(syntactic analysis),把流式标记翻译成可执行代码。

 

小结:

 

编译有三个步骤,分别是转换、词法分析和句法分析。

词法分析中最重要的是“标记”(注意,不是标识,标识是标记中的一种);预处理也是词法的重要组成。

标记中最重要的是关键字和运算符。

分享到:
评论

相关推荐

    IRQ hierarchy的初始化及构建过程详解

    在了解 IRQ hierarchy 的初始化及构建过程之前,需要先了解三个基本概念:IRQ、HWIRQ 和 GSI。 IRQ(Interrupt Request)是系统中的一种机制,允许外部设备请求 CPU 的注意,以便处理某些事件。IRQ 是一个抽象的...

    Android View Hierarchy,解决View Hierarchy不能启动

    解决这个启动 View Hierarchy时的这个bug: hierarchy viewer unable to debug device

    Hierarchy面板管理插件(Unity)

    Hierarchy PRO是一个高级的Hierarchy面板扩展,它提供了更多的自定义选项和便捷的功能。此插件可能包括但不限于以下特性: 1. **过滤与排序**:Hierarchy PRO允许用户根据需求筛选和排序场景中的游戏对象,比如按...

    Android 实用工具Hierarchy Viewer实战

    Android 开发中,UI 分析工具 Hierarchy Viewer 是一个非常有用的工具,可以帮助开发者快速、方便地设计、调试和调整界面,提高用户的开发效率。本文将详细介绍如何使用 Hierarchy Viewer 工具在 Android 开发过程中...

    Hierarchy PRO 2021 v2021.1u9.unitypackage

    Hierarchy PRO 2021 v2021.1u9

    SAP BW Hierarchy Extractor

    本篇文档将详细介绍如何为员工及其部门经理创建一个层次数据源(Hierarchy Extractor)。通过这个层次数据源,管理者可以方便地获取到他们直接下属的信息以及这些下属所负责或有权访问的数据。此文档适用于运行ECC 5.0...

    android工具Hierarchy_Viewer命令详解

    Hierarchy Viewer是Android SDK中自带的一款强大的UI设计与检测工具。它位于Android SDK的`tools`目录下,文件名为`hierarchyviewer.bat`。对于Android开发者来说,这是一个不可或缺的工具,能够帮助他们在开发过程...

    Unity 提取并拷贝物体Hierarchy路径

    效果及使用方法:https://blog.csdn.net/qq_26318597/article/details/131373576 1.导入插件包 2.选中Hierarchy中的物体 3.右键选择“复制Hierarchy路径” 4.Ctrl + V 粘贴

    Enhanced_Hierarchy_2.0_v2.4.5.unitypackage

    Enhanced_Hierarchy_2.0_v2.4.5.unitypackage 最新版本哦 正版

    Unity Hierarchy面板增强插件 QHierarchy v4.4

    Unity是世界上最流行的游戏开发引擎之一,它为开发者提供了丰富的工具集来创建交互式3D和2D内容。在Unity中,Hierarchy面板是一个至关重要的组成部分,它显示了场景中的所有游戏对象及其层次结构。QHierarchy是一款...

    Unity 层级编辑器插件最新版 Hierarchy PRO v2019.3p4

    Unity是世界上最受欢迎的游戏开发引擎之一,它提供了丰富的工具和功能,让开发者能够创建高质量的2D和3D游戏。在Unity中,"层级编辑器"(Hierarchy)是至关重要的一个部分,它允许开发者组织和管理场景中的游戏对象...

    Evolve Your Hierarchy

    在游戏开发领域,“演化你的游戏实体层级”(Evolve Your Hierarchy)这一概念强调了从传统的深度类层级结构向更灵活、可扩展的游戏实体组件化方法转变的重要性。这种方法不仅提高了代码的复用性与可维护性,还简化...

    WPF Class Hierarchy

    WPF Class Hierarchy

    VS2010 MFC Hierarchy Chart

    通过阅读和理解《VS2010 MFC Hierarchy Chart》的三个部分(MFC_Hierarchy_Chart1of3.pdf、MFC_Hierarchy_Chart2of3.pdf、MFC_Hierarchy_Chart3of3.pdf),开发者可以深入理解MFC的内部结构,从而更好地利用MFC开发...

    Hierarchy2 v1.3.10.0

    Hierarchy2 v1.3.10.0

    前端项目-d3-hierarchy.zip

    在这个名为“前端项目-d3-hierarchy.zip”的压缩包中,包含了一个使用D3.js库实现的层次数据可视化布局算法。D3.js(Data-Driven Documents)是一个强大的JavaScript库,专为创建动态、交互式的SVG、Canvas或WebGL...

    Hierarchy PRO - Auto HighLighter v21.3f1 2019/5/14更新

    *商用请支持正版* 2019/5/14更新更新的Hierarchy PRO - Auto HighLighter v21.3f1

Global site tag (gtag.js) - Google Analytics