我告诫自己,不要忽略简单的东西,又要扎实。所以这一篇开始,专门来研究下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),把流式标记翻译成可执行代码。
小结:
编译有三个步骤,分别是转换、词法分析和句法分析。
词法分析中最重要的是“标记”(注意,不是标识,标识是标记中的一种);预处理也是词法的重要组成。
标记中最重要的是关键字和运算符。
发表评论
-
ZT,一篇好文
2010-05-03 10:33 999读读语言大牛们(其中有位是Anders)这篇文章,会很受益。( ... -
关于“匿名方法”与“lambda操作符”的实现
2010-03-24 22:29 871在<关于“回调”的实现>一文中,我们探讨了使用委托 ... -
effective hierarchy(二)之 函数合辑(2)
2009-09-16 21:29 727介绍: 本节我们来看看另外一种封装,构建件。构建件作为 ... -
effective hierarchy(二)之 函数合辑(1)
2009-08-19 14:53 781“暴露”阶段:值-> ... -
effective hierarchy(一)之 基本概念(8)
2009-07-02 23:39 686MSDN,C#2 一、语句 1.结束点和可达性(en ... -
effective hierarchy(一)之 基本概念结束篇
2009-06-30 15:41 662一、函数/功能成员(fun ... -
effective hierarchy(一)之 基本概念(7)
2009-06-23 21:15 937以下可跳过: [立记保留:到现在为止,我满意的是认真的精神。 ... -
effective hierarchy(一)之 基本概念(6)
2009-06-21 00:34 949MSDN,C#2.0 转换(conversions) ... -
effective hierarchy(一)之 基本概念(5)
2009-06-18 22:16 715MSDN,C#2.0 变量基本点: 变量代表 ... -
effective hierarchy(一)之 基本概念(4)
2009-06-15 15:59 726MSDN,C#2.0: 一、名字空间和类型名称(nam ... -
effective hierarchy(一)之 基本概念(3)
2009-06-14 15:00 730MSDN,C#2.0: 一、签 ... -
effective hierarchy(一)之 基本概念(2)
2009-06-13 18:22 828MSDN:基本概念 一、 ... -
effective hierarchy(一)之 属性与索引器
2009-06-07 14:07 1149编程笺言:“优良的设计 ... -
effective hierarchy(一)之 从array说起(4)
2009-06-07 00:53 803回顾:上一节中,我们 ... -
effective hierarchy(一)之 从array说起(3)
2009-06-06 21:20 700回顾: 从上一节中,可以看出枚举的易用性对数组使用的启示意义 ... -
effective hierarchy(一)之 从array说起(2)
2009-06-06 09:34 691复习: 从上一节,可 ... -
effective hierarchy(一)之 从array说起(1)
2009-05-29 13:59 891MSDN(c#2.0): 数组的元义是 ... -
effective hierarchy(一)之 C#中的new
2009-05-27 23:21 840MSDN(c#2.0): 在msdn中,指出new的三种用法。 ...
相关推荐
在了解 IRQ hierarchy 的初始化及构建过程之前,需要先了解三个基本概念:IRQ、HWIRQ 和 GSI。 IRQ(Interrupt Request)是系统中的一种机制,允许外部设备请求 CPU 的注意,以便处理某些事件。IRQ 是一个抽象的...
解决这个启动 View Hierarchy时的这个bug: hierarchy viewer unable to debug device
Hierarchy PRO是一个高级的Hierarchy面板扩展,它提供了更多的自定义选项和便捷的功能。此插件可能包括但不限于以下特性: 1. **过滤与排序**:Hierarchy PRO允许用户根据需求筛选和排序场景中的游戏对象,比如按...
Android 开发中,UI 分析工具 Hierarchy Viewer 是一个非常有用的工具,可以帮助开发者快速、方便地设计、调试和调整界面,提高用户的开发效率。本文将详细介绍如何使用 Hierarchy Viewer 工具在 Android 开发过程中...
Hierarchy PRO 2021 v2021.1u9
本篇文档将详细介绍如何为员工及其部门经理创建一个层次数据源(Hierarchy Extractor)。通过这个层次数据源,管理者可以方便地获取到他们直接下属的信息以及这些下属所负责或有权访问的数据。此文档适用于运行ECC 5.0...
Hierarchy Viewer是Android SDK中自带的一款强大的UI设计与检测工具。它位于Android SDK的`tools`目录下,文件名为`hierarchyviewer.bat`。对于Android开发者来说,这是一个不可或缺的工具,能够帮助他们在开发过程...
效果及使用方法:https://blog.csdn.net/qq_26318597/article/details/131373576 1.导入插件包 2.选中Hierarchy中的物体 3.右键选择“复制Hierarchy路径” 4.Ctrl + V 粘贴
#### 一、Hierarchy Viewer概览 Hierarchy Viewer是一款由Google提供的强大工具,专为Android开发者设计,旨在辅助界面设计、调试及优化工作流程。通过直观地展示应用UI的层级结构,它使得开发者能够轻松识别布局...
Unity是世界上最流行的游戏开发引擎之一,它为开发者提供了丰富的工具集来创建交互式3D和2D内容。在Unity中,Hierarchy面板是一个至关重要的组成部分,它显示了场景中的所有游戏对象及其层次结构。QHierarchy是一款...
Enhanced_Hierarchy_2.0_v2.4.5.unitypackage 最新版本哦 正版
Unity是世界上最受欢迎的游戏开发引擎之一,它提供了丰富的工具和功能,让开发者能够创建高质量的2D和3D游戏。在Unity中,"层级编辑器"(Hierarchy)是至关重要的一个部分,它允许开发者组织和管理场景中的游戏对象...
在游戏开发领域,“演化你的游戏实体层级”(Evolve Your Hierarchy)这一概念强调了从传统的深度类层级结构向更灵活、可扩展的游戏实体组件化方法转变的重要性。这种方法不仅提高了代码的复用性与可维护性,还简化...
WPF Class Hierarchy
通过阅读和理解《VS2010 MFC Hierarchy Chart》的三个部分(MFC_Hierarchy_Chart1of3.pdf、MFC_Hierarchy_Chart2of3.pdf、MFC_Hierarchy_Chart3of3.pdf),开发者可以深入理解MFC的内部结构,从而更好地利用MFC开发...
Hierarchy2 v1.3.10.0
在这个名为“前端项目-d3-hierarchy.zip”的压缩包中,包含了一个使用D3.js库实现的层次数据可视化布局算法。D3.js(Data-Driven Documents)是一个强大的JavaScript库,专为创建动态、交互式的SVG、Canvas或WebGL...
*商用请支持正版* 2019/5/14更新更新的Hierarchy PRO - Auto HighLighter v21.3f1