C# 语法参考
文档中描述的词法和语法以及不安全代码的语法扩展的摘要。这里,各语法产生式是按它们在主文档中出现的顺序列出的。
C.1 词法
input:(输入:)
input-sectionopt(输入节可选)
input-section:(输入节:)
input-section-part(输入节部分)
input-section input-section-part(输入节 输入节部分)
input-section-part:(输入节部分:)
input-elementsopt new-line(输入元素可选 新行)
pp-directive(pp 指令)
input-elements:(输入元素:)
input-element(输入元素)
input-elements input-element(输入元素 输入元素)
input-element:(输入元素:)
whitespace(空白)
comment(注释)
token(标记)
C.1.1 行结束符
new-line:(新行:)
回车符 (U+000D)
换行符 (U+000A)
回车符 (U+000D) 后跟换行符 (U+000A)
行分隔符 (U+2028)
段落分隔符 (U+2029)
C.1.2 空白
whitespace:(空白:)
任何含 Unicode 类 Zs 的字符
水平制表符 (U+0009)
垂直制表符 (U+000B)
换页符 (U+000C)
C.1.3 注释
comment:(注释:)
single-line-comment(单行注释)
delimited-comment(带分隔符的注释)
single-line-comment:(单行注释:)
// input-charactersopt(// 输入字符可选)
input-characters:(输入字符:)
input-character(输入字符)
input-characters input-character(输入字符 输入字符)
input-character:(输入字符:)
除换行符外的任何 Unicode 字符
new-line-character:(换行符:)
回车符 (U+000D)
换行符 (U+000A)
行分隔符 (U+2028)
段落分隔符 (U+2029)
delimited-comment:(带分隔符的注释:)
/* delimited-comment-charactersopt */(/* 带分隔符的注释字符可选 */)
delimited-comment-characters:(带分隔符的注释字符:)
delimited-comment-character(带分隔符的注释字符)
delimited-comment-characters delimited-comment-character(带分隔符的注释字符 带分隔符的注释字符)
delimited-comment-character:(带分隔符的注释字符:)
not-asterisk(非星号)
* not-slash(* 非斜杠)
not-asterisk:(非星号:)
除 * 外的任何 Unicode 字符
not-slash:(非斜杠:)
除 / 外的任何 Unicode 字符
C.1.4 标记
token:(标记:)
identifier(标识符)
keyword(关键字)
integer-literal(整数)
real-literal(实数)
character-literal(字符)
string-literal(字符串)
operator-or-punctuator(运算符或标点)
C.1.5 Unicode 字符转义序列
unicode-escape-sequence:(unicode 转义序列:)
/u hex-digit hex-digit hex-digit hex-digit(/u 十六进制数字 十六进制数字 十六进制数字 十六进制数字)
/U hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit(/U 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字)
C.1.6 标识符
identifier:(标识符:)
available-identifier(可用的标识符)
@ identifier-or-keyword(@ 标识符或关键字)
available-identifier:(可用的标识符:)
不是“关键字”的“标识符或关键字”
identifier-or-keyword:(标识符或关键字:)
identifier-start-character identifier-part-charactersopt(标识符开始字符 标识符部分字符可选)
identifier-start-character:(标识符开始字符:)
letter-character(字母字符)
_ (the underscore character U+005F)(下划线字符 U+005F)
identifier-part-characters:(标识符部分字符:)
identifier-part-character(标识符部分字符)
identifier-part-characters identifier-part-character(标识符部分字符 标识符部分字符)
identifier-part-character:(标识符部分字符:)
letter-character(字母字符)
decimal-digit-character(十进制数字字符)
connecting-character(连接字符)
combining-character(组合字符)
formatting-character(格式设置字符)
letter-character:(字母字符:)
类 Lu、Ll、Lt、Lm、Lo 或 Nl 的 Unicode 字符
表示类 Lu、Ll、Lt、Lm、Lo 或 Nl 的字符的 unicode 转义序列
combining-character:(组合字符:)
类 Mn 或 Mc 的 Unicode 字符
表示类 Mn 或 Mc 的字符的 unicode 转义序列
decimal-digit-character:(十进制数字字符:)
类 Nd 的 Unicode 字符
表示类 Nd 的字符的 unicode 转义序列
connecting-character:(连接字符:)
类 Pc 的 Unicode 字符
表示类 Pc 的字符的 unicode 转义序列
formatting-character:(格式设置字符:)
类 Cf 的 Unicode 字符
表示类 Cf 的字符的 unicode 转义序列
C.1.7 关键字
keyword: one of(关键字:下列之一)
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
C.1.8 文本
literal:(文本:)
boolean-literal(布尔值)
integer-literal(整数)
real-literal(实数)
character-literal(字符)
string-literal(字符串)
null-literal(空值)
boolean-literal:(布尔值:)
true
false
integer-literal:(整数:)
decimal-integer-literal(十进制整数)
hexadecimal-integer-literal(十六进制整数)
decimal-integer-literal:(十进制整数:)
decimal-digits integer-type-suffixopt(十进制数字 整数类型后缀可选)
decimal-digits:(十进制数字:)
decimal-digit(十进制数字)
decimal-digits decimal-digit(十进制数字 十进制数字)
decimal-digit: one of(十进制数字:下列之一)
0 1 2 3 4 5 6 7 8 9
integer-type-suffix: one of(整数类型后缀:下列之一)
U u L l UL Ul uL ul LU Lu lU lu
hexadecimal-integer-literal:(十六进制整数:)
0x hex-digits integer-type-suffixopt(0x 十六进制数字 整型后缀可选)
0X hex-digits integer-type-suffixopt(0X 十六进制数字 整型后缀可选)
hex-digits:(十六进制数字:)
hex-digit(十六进制数字)
hex-digits hex-digit(十六进制数字 十六进制数字)
hex-digit: one of(十六进制数字:下列之一)
0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f
real-literal:(实数:)
decimal-digits . decimal-digits exponent-partopt real-type-suffixopt(十进制数字 . 十进制数字 指数部分可选 实数类型后缀可选)
. decimal-digits exponent-partopt real-type-suffixopt(. 十进制数字 指数部分可选 实数类型后缀可选)
decimal-digits exponent-part real-type-suffixopt(十进制数字 指数部分 实数类型后缀可选)
decimal-digits real-type-suffix(十进制数字 实数类型后缀)
exponent-part:(指数部分:)
e signopt decimal-digits(e 符号可选 十进制数字)
E signopt decimal-digits(E 符号可选 十进制数字)
sign: one of(符号:下列之一)
+ -
real-type-suffix: one of(实数类型后缀:下列之一)
F f D d M m
character-literal:(字符:)
' character '(' 字符 ')
character:(字符:)
single-character(单字符)
simple-escape-sequence(简单转义序列)
hexadecimal-escape-sequence(十六进制转义序列)
unicode-escape-sequence(unicode 转义序列)
single-character:(单字符:)
除 ' (U+0027)、/ (U+005C) 和换行符外的任何字符
simple-escape-sequence: one of(简单转义序列:下列之一)
/' /" // /0 /a /b /f /n /r /t /v
hexadecimal-escape-sequence:(十六进制转义序列:)
/x hex-digit hex-digitopt hex-digitopt hex-digitopt(/x 十六进制数字 十六进制数字可选 十六进制数字可选 十六进制数字可选)
string-literal:(字符串:)
regular-string-literal(规则字符串)
verbatim-string-literal(逐字的字符串)
regular-string-literal:(规则字符串:)
" regular-string-literal-charactersopt "(" 规则字符串字符可选 ")
regular-string-literal-characters:(规则字符串字符:)
regular-string-literal-character(规则字符串字符)
regular-string-literal-characters regular-string-literal-character(规则字符串字符 规则字符串字符)
regular-string-literal-character:(规则字符串字符:)
single-regular-string-literal-character(单个规则字符串字符)
simple-escape-sequence(简单转义序列)
hexadecimal-escape-sequence(十六进制转义序列)
unicode-escape-sequence(unicode 转义序列)
single-regular-string-literal-character:(单个规则字符串字符:)
除 " (U+0022)、/ (U+005C) 和换行符外的任何字符
verbatim-string-literal:(逐字的字符串:)
@" verbatim -string-literal-charactersopt "(@" 逐字的字符串字符可选 ")
verbatim-string-literal-characters:(逐字的字符串字符:)
verbatim-string-literal-character(逐字的字符串字符)
verbatim-string-literal-characters verbatim-string-literal-character(逐字的字符串字符 逐字的字符串字符)
verbatim-string-literal-character:(逐字的字符串字符:)
single-verbatim-string-literal-character(单个逐字的字符串字符)
quote-escape-sequence(引号转义序列)
single-verbatim-string-literal-character:(单个逐字的字符串字符:)
除 " 外的任何字符
quote-escape-sequence:(引号转义序列:)
""
null-literal:(空文本:)
null
C.1.9 运算符和标点符号
operator-or-punctuator:(运算符或标点符号:下列之一)
{ } [ ] ( ) . , : ;
+ - * / % & | ^ ! ~
= < > ? ++ -- && || << >>
== != <= >= += -= *= /= %= &=
| = ^= <<= >>= ->
C.1.10 预处理指令
pp-directive:(pp 指令:)
pp-declaration(pp 声明)
pp-conditional(pp 条件)
pp-line(pp 行)
pp-diagnostic(pp 诊断)
pp-region(pp 区域)
pp-new-line:(pp 新行:)
whitespaceopt single-line-commentopt new-line(空白可选 单行注释可选 新行)
conditional-symbol:(条件符号:)
除 true 和 false 外的任何标识符或关键字
pp-expression:(pp 表达式:)
whitespaceopt pp-or-expression whitespaceopt(空白可选 pp 或表达式 空白可选)
pp-or-expression:(pp 或表达式:)
pp-and-expression(pp 与表达式)
pp-or-expression whitespaceopt || whitespaceopt pp-and-expression(pp 或表达式 空白可选 || 空白可选 pp 与表达式)
pp-and-expression:(pp 与表达式:)
pp-equality-expression(pp 相等表达式)
pp-and-expression whitespaceopt && whitespaceopt pp-equality-expression(pp 与表达式 空白可选 && 空白可选 pp 相等表达式)
pp-equality-expression:(pp 相等表达式:)
pp-unary-expression(pp 一元表达式)
pp-equality-expression whitespaceopt == whitespaceopt pp-unary-expression(pp 相等表达式 空白可选 == 空白可选 pp 一元表达式)
pp-equality-expression whitespaceopt != whitespaceopt pp-unary-expression(pp 相等表达式 空白可选 != 空白可选 pp 一元表达式)
pp-unary-expression:(pp 一元表达式:)
pp-primary-expression(pp 基本表达式)
! whitespaceopt pp-unary-expression(! 空白可选 pp 一元表达式)
pp-primary-expression:(pp 基本表达式:)
true
false
conditional-symbol(条件符号)
( whitespaceopt pp-expression whitespaceopt )((空白可选 pp 表达式 空白可选 ))
pp-declaration:(pp 声明:)
whitespaceopt # whitespaceopt define whitespace conditional-symbol pp-new-line(空白可选 # 空白可选 define 空白 条件符号 pp 新行)
whitespaceopt # whitespaceopt undef whitespace conditional-symbol pp-new-line(空白可选 # 空白可选 undef 空白 条件符号 pp 新行)
pp-conditional:(pp 条件:)
pp-if-section pp-elif-sectionsopt pp-else-sectionopt pp-endif(pp if 节 pp elif 节可选 pp else 节可选 pp endif)
pp-if-section:(pp if 节:)
whitespaceopt # whitespaceopt if whitespace pp-expression pp-new-line conditional-sectionopt(空白可选 # 空白可选 if 空白 pp 表达式 pp 新行 条件节可选)
pp-elif-sections:(pp elif 节:)
pp-elif-section(pp elif 节)
pp-elif-sections pp-elif-section(pp elif 节 pp elif 节)
pp-elif-section:(pp elif 节:)
whitespaceopt # whitespaceopt elif whitespace pp-expression pp-new-line conditional-sectionopt(空白可选 # 空白可选 elif 空白 pp 表达式 pp 新行 条件节可选)
pp-else-section:(pp else 节:)
whitespaceopt # whitespaceopt else pp-new-line conditional-sectionopt(空白可选 # 空白可选 else pp 新行 条件节可选)
pp-endif:
whitespaceopt # whitespaceopt endif pp-new-line(空白可选 # 空白可选 endif pp 新行)
conditional-section:(条件节:)
input-section(输入节)
skipped-section(跳过节)
skipped-section:(跳过节:)
skipped-section-part(跳过节部分)
skipped-section skipped-section-part(跳过节 跳过节部分)
skipped-section-part:(跳过节部分:)
skipped-charactersopt new-line(跳过字符可选 新行)
pp-directive(pp 指令)
skipped-characters:(跳过字符:)
whitespaceopt not-number-sign input-charactersopt(空白可选 非数字符号 输入字符可选)
not-number-sign:(非数字符号:)
除 # 外的任何输入字符
pp-line:(pp 行:)
whitespaceopt # whitespaceopt line whitespace line-indicator pp-new-line(空白可选 # 空白可选 line 空白 行指示符 pp 新行)
line-indicator:(行指示符:)
decimal-digits whitespace file-name(十进制数字 空白 文件名)
decimal-digits(十进制数字)
default(default)
file-name:(文件名:)
" file-name-characters "(" 文件名字符 ")
file-name-characters:(文件名字符:)
file-name-character(文件名字符)
file-name-characters file-name-character(文件名字符 文件名字符)
file-name-character:(文件名字符:)
除 " 外的任何输入字符
pp-diagnostic:(pp 诊断:)
whitespaceopt # whitespaceopt error pp-message(空白可选 # 空白可选 error pp 消息)
whitespaceopt # whitespaceopt warning pp-message(空白可选 # 空白可选 warning pp 消息)
pp-message:(pp 消息:)
new-line(新行)
whitespace input-charactersopt new-line(空白 输入字符可选 新行)
pp-region:(pp 区域:)
pp-start-region conditional-sectionopt pp-end-region(pp 开始区域 条件节可选 pp 结束区域)
pp-start-region:(pp 开始区域:)
whitespaceopt # whitespaceopt region pp-message(空白可选 # 空白可选 region pp 消息)
pp-end-region:(pp 结束区域:)
whitespaceopt # whitespaceopt endregion pp-message(空白可选 # 空白可选 endregion pp 消息)
C.2 语法
C.2.1 基本概念
namespace-name:(命名空间名称:)
namespace-or-type-name(命名空间或类型名称)
type-name:(类型名:)
namespace-or-type-name(命名空间或类型名称)
namespace-or-type-name:(命名空间或类型名称:)
identifier(标识符)
namespace-or-type-name . identifier(命名空间或类型名称 . 标识符)
C.2.2 类型
type:(类型:)
value-type(值类型)
reference-type(引用类型)
value-type:(值类型:)
struct-type(结构类型)
enum-type(枚举类型)
struct-type:(结构类型:)
type-name(类型名称)
simple-type(简单类型)
simple-type:(简单类型:)
numeric-type(数值类型)
bool
numeric-type:(数值类型:)
integral-type(整型)
floating-point-type(浮点类型)
decimal
integral-type:(整型:)
sbyte
byte
short
ushort
int
uint
long
ulong
char
floating-point-type:(浮点类型:)
float
double
enum-type:(枚举类型:)
type-name(类型名)
reference-type:(引用类型:)
class-type(类类型)
interface-type(接口类型)
array-type(数组类型)
delegate-type(委托类型)
class-type:(类类型:)
type-name(类型名)
object
string
interface-type:(接口类型:)
type-name(类型名)
array-type:(数组类型:)
non-array-type rank-specifiers(非数组类型 秩说明符)
non-array-type:(非数组类型:)
type(类型)
rank-specifiers:(秩说明符:)
rank-specifier(秩说明符)
rank-specifiers rank-specifier(秩说明符 秩说明符)
rank-specifier:(秩说明符)
[ dim-separatorsopt ]([ 维度分隔符可选 ])
dim-separators:(维度分隔符:)
,
dim-separators ,(维度分隔符 ,)
delegate-type:(委托类型:)
type-name(类型名)
C.2.3 变量
variable-reference:(变量引用:)
expression(表达式)
C.2.4 表达式
argument-list:(参数列表:)
argument(参数)
argument-list , argument(参数列表 , 参数)
argument:(参数:)
expression(表达式)
ref variable-reference(ref 变量引用)
out variable-reference(out 变量引用)
primary-expression:(基本表达式:)
primary-no-array-creation-expression(非数组创建基本表达式)
array-creation-expression(数组创建表达式)
primary-no-array-creation-expression:(非数组创建基本表达式:)
literal(文本)
simple-name(简称)
parenthesized-expression(带括号的表达式)
member-access(成员访问)
invocation-expression(调用表达式)
element-access(元素访问)
this-access(this 访问)
base-access(base 访问)
post-increment-expression(后增量表达式)
post-decrement-expression(后减量表达式)
object-creation-expression(对象创建表达式)
delegate-creation-expression(委托创建表达式)
typeof-expression(typeof 表达式)
sizeof-expression(sizeof 表达式)
checked-expression(checked 表达式)
unchecked-expression(unchecked 表达式)
simple-name:(简称:)
identifier(标识符)
parenthesized-expression:(带括号的表达式:)
( expression )(( 表达式 ))
member-access:(成员访问:)
primary-expression . identifier(基本表达式 . 标识符)
predefined-type . identifier(预定义类型 . 标识符)
predefined-type: one of(预定义类型:下列之一)
bool byte char decimal double float int long
object sbyte short string uint ulong ushort
invocation-expression:(调用表达式:)
primary-expression ( argument-listopt )(基本表达式 ( 参数列表可选 ))
element-access:(元素访问:)
primary-no-array-creation-expression [ expression-list ](非数组创建基本表达式 [ 表达式列表 ])
expression-list:(表达式列表:)
expression(表达式)
expression-list , expression(表达式列表 , 表达式)
this-access:(this 访问:)
this
base-access:(base 访问:)
base . identifier(base . 标识符)
base [ expression-list ](base [ 表达式列表 ])
post-increment-expression:(后增量表达式:)
primary-expression ++(基本表达式 ++)
post-decrement-expression:(后减量表达式:)
primary-expression --(基本表达式 --)
object-creation-expression:(对象创建表达式:)
new type ( argument-listopt )(new 类型 ( 参数列表可选 ))
array-creation-expression:(数组创建表达式:)
new non-array-type [ expression-list ] rank-specifiersopt array-initializeropt(new 非数组类型 [ 表达式列表 ] 秩说明符可选 数组初始值设定项可选)
new array-type array-initializer(new 数组类型 数组初始值设定项)
delegate-creation-expression:(委托创建表达式:)
new delegate-type ( expression )(new 委托类型 ( 表达式 ))
typeof-expression:(typeof 表达式:)
typeof ( type )(typeof ( 类型 ))
typeof ( void )
checked-expression:(checked 表达式:)
checked ( expression )(checked ( 表达式 ))
unchecked-expression:(unchecked 表达式:)
unchecked ( expression )(unchecked ( 表达式 ))
unary-expression:(一元表达式:)
primary-expression(基本表达式)
+ unary-expression(+ 一元表达式)
- unary-expression(- 一元表达式)
! unary-expression(! 一元表达式)
~ unary-expression(~ 一元表达式)
* unary-expression(* 一元表达式)
pre-increment-expression(前增量表达式)
pre-decrement-expression(前减量表达式)
cast-expression(强制转换表达式)
pre-increment-expression:(前增量表达式:)
++ unary-expression(++ 一元表达式)
pre-decrement-expression:(前减量表达式:)
-- unary-expression(-- 一元表达式)
cast-expression:(强制转换表达式:)
( type ) unary-expression(( 类型 ) 一元表达式)
multiplicative-expression:(乘法表达式:)
unary-expression(一元表达式)
multiplicative-expression * unary-expression(乘法表达式 * 一元表达式)
multiplicative-expression / unary-expression(乘法表达式 / 一元表达式)
multiplicative-expression % unary-expression(乘法表达式 % 一元表达式)
additive-expression:(增量表达式:)
multiplicative-expression(乘法表达式)
additive-expression + multiplicative-expression(加法表达式 + 乘法表达式)
additive-expression – multiplicative-expression(加法表达式 – 乘法表达式)
shift-expression:(移位表达式:)
additive-expression(加法表达式)
shift-expression << additive-expression(移位表达式 << 加法表达式)
shift-expression >> additive-expression(移位表达式 >> 加法表达式)
relational-expression:(关系表达式:)
shift-expression(移位表达式)
relational-expression < shift-expression(关系表达式 < 移位表达式)
relational-expression > shift-expression(关系表达式 > 移位表达式)
relational-expression <= shift-expression(关系表达式 <= 移位表达式)
relational-expression >= shift-expression(关系表达式 >= 移位表达式)
relational-expression is type(关系表达式 is 类型)
relational-expression as type(关系表达式 as 类型)
equality-expression:(相等表达式:)
relational-expression(关系表达式)
equality-expression == relational-expression(相等表达式 == 关系表达式)
equality-expression != relational-expression(相等表达式 != 关系表达式)
and-expression:(与表达式:)
equality-expression(相等表达式)
and-expression & equality-expression(与表达式 & 相等表达式)
exclusive-or-expression:(异或表达式:)
and-expression(与表达式)
exclusive-or-expression ^ and-expression(异或表达式 ^ 与表达式)
inclusive-or-expression:(或表达式:)
exclusive-or-expression(异或表达式)
inclusive-or-expression | exclusive-or-expression(异或表达式 | 异或表达式)
conditional-and-expression:(条件与表达式:)
inclusive-or-expression(或表达式)
conditional-and-expression && inclusive-or-expression(条件与表达式 && 或表达式)
conditional-or-expression:(条件或表达式:)
conditional-and-expression(条件与表达式)
conditional-or-expression || conditional-and-expression(条件或表达式 || 条件与表达式)
conditional-expression:(条件表达式:)
conditional-or-expression(条件或表达式)
conditional-or-expression ? expression : expression(条件或表达式 ? 表达式 : 表达式)
assignment:(赋值:)
unary-expression assignment-operator expression(一元表达式 赋值运算符 表达式)
assignment-operator: one of(赋值运算符:下列之一)
= += -= *= /= %= &= | = ^= <<= >>=
expression:(表达式:)
conditional-expression(条件表达式)
assignment(赋值)
constant-expression:(常数表达式:)
expression(表达式)
boolean-expression:(布尔表达式:)
expression(表达式)