C#语句令牌

时间:2015-11-15 11:46:05

标签: c#

某处我读过:

  

声明由令牌组成。这些标记可以是关键字,标识符(变量),运算符和语句终结符,它是分号(;)。

我在想,这些是唯一的#34;令牌"从哪个C#语句形成?还有其他没有提到的吗?

2 个答案:

答案 0 :(得分:2)

这是编译器编写者谈论语句的方式。标量词由词法分析器(又名词法分析器)生成,解析器将其解释为解析有效语句。不是特定于C#语言,几乎任何语言都是这样的。列表中缺少文字,评论和文件结尾可以是标记。

特定于C#编译器,它的源代码现在很容易获得,没有关键字令牌,但每个关键字本身就是一个令牌。就像" for"的TID_FOR一样关键字和TID_BYTE用于"字节"关键字,等等。有四种文字标记:数字,字符串,带@和字符的字符串。四种评论:单行,多行,///单行和///多行。

C#词法分析器不对运算符进行分类,只对构建运算符的字符进行分类。必要的,因为,比如,' ['和']'可以表示不同的东西(索引操作符与属性声明)。解析器根据解析器状态确定哪个解释是正确的。

C#有上下文关键字,例如" yield"。词法分析器将其归类为常规标识符,解析器在看到它时会识别它,然后返回"返回"。上下文关键字很好,因为它们可以避免破坏意外使用" yield"作为变量名称。这是他们添加" async"的方式。和#34;等待"到版本5而不破坏现有程序。

答案 1 :(得分:0)

令牌基本上都是语言中的一切。你写的几乎所有东西都是令牌。

每个关键字(例如publicstaticvoidusing),每种类型(例如ConsoleConvertInt32),每个标识符,每个运算符(例如[]+-*/%,甚至.)都是一个标记。编译器使用令牌来识别你在做什么。写作。它会查看它可以找到的每个标记,并且(例如)看到它:

public static void Main (string[] args) {}

它认为,这必须是一种方法!它有一些修饰符(public static)和一个名称(Main),一个返回值类型(void)和一个参数列表(())。因此,它将这段代码转换为IL,并为您准备好运行它。 (虽然它什么也没做)

所以令牌表示你在写什么。它是语言的基本单位,就像细胞是生命的基本单位一样。