C#语句标记
本文关键字:语句 | 更新日期: 2023-09-27 18:22:02
我读过的地方:
语句是由令牌形成的。这些标记可以是关键字、标识符(变量)、运算符和作为分号(;)的语句终止符。
我想知道,这些是形成C#语句的唯一"标记"吗?还有其他没有提到的吗?
这是编译器编写者谈论语句的方式。令牌由lexer(又名词法分析器)生成,解析器对其进行解释以解析有效语句。并不是特定于C#语言,几乎任何语言都是这样工作的。列表中缺少文字,注释和文件结尾可以是标记。
具体到C#编译器,它的源代码现在很容易获得,没有关键字令牌,但每个关键字本身就是一个令牌。类似于TID_FOR表示"FOR"关键字,TID_BYTE表示"BYTE"关键字,等等。有四种文字标记:数字、字符串、带@的字符串和字符。四种注释:单行、多行、///单行和///多行。
C#lexer不对运算符进行分类,只对构建运算符的字符进行分类。必要的,因为"["answers"]"可以表示不同的含义(索引运算符与属性声明)。解析器根据解析器的状态来判断哪种解释是正确的。
C#具有上下文关键字,如"yield"。被lexer分类为常规标识符,解析器在看到后面跟着"return"时就会识别它。上下文关键字很好,因为它们可以避免破坏意外使用"yield"作为变量名的程序。这是他们可以在不破坏现有程序的情况下将"async"answers"wait"添加到版本5的方式。