C#中反射接受的字符串需要满足的Backus-Naur Form语法

MSDN的Specifying Fully Qualified Type Names指明了C#中反射接受的字符串需要满足如下的Backus-Naur Form语法。

BNF grammar of fully qualified type names

TypeSpec                          :=   ReferenceTypeSpec

|     SimpleTypeSpec

ReferenceTypeSpec            :=   SimpleTypeSpec '&'

SimpleTypeSpec                :=   PointerTypeSpec

|     ArrayTypeSpec

|     TypeName

PointerTypeSpec                :=   SimpleTypeSpec '*'

ArrayTypeSpec                  :=   SimpleTypeSpec '[ReflectionDimension]'

|     SimpleTypeSpec '[ReflectionEmitDimension]'

ReflectionDimension           :=   '*'

|     ReflectionDimension ',' ReflectionDimension

|     NOTOKEN

ReflectionEmitDimension    :=   '*'

|     Number '..' Number

|     Number '…'

|     ReflectionDimension ',' ReflectionDimension

|     NOTOKEN

Number                            :=   [0-9]+

TypeName                         :=   NamespaceTypeName

|     NamespaceTypeName ',' AssemblyNameSpec

NamespaceTypeName        :=   NestedTypeName

|     NamespaceSpec '.' NestedTypeName

NestedTypeName               :=   IDENTIFIER

|     NestedTypeName '+' IDENTIFIER

NamespaceSpec                 :=   IDENTIFIER

|     NamespaceSpec '.' IDENTIFIER

AssemblyNameSpec           :=   IDENTIFIER

|     IDENTIFIER ',' AssemblyProperties

AssemblyProperties            :=   AssemblyProperty

|     AssemblyProperties ',' AssemblyProperty

AssemblyProperty              :=   AssemblyPropertyName '=' AssemblyPropertyValue

Backus-Naur Form的介绍可以看wikipedia的介绍:Backus–Naur Form。他的主要内容如下:

  1. 在双引号中的字("word")代表着这些字符本身。而double_quote用来代表双引号。
  2. 在双引号外的字(有可能有下划线)代表着语法部分。
  3. 尖括号( < > )内包含的为必选项。
  4. 方括号( [ ] )内包含的为可选项。
  5. 大括号( { } )内包含的为可重复0至无数次的项。
  6. 竖线( | )表示在其左右两边任选一项,相当于"OR"的意思。
  7. ::= 是“被定义为”的意思。

所以MSDN的表格的第一行就是说,TypeSpec定义为ReferenceTypeSpec或者SimpleTypeSpec,而ReferenceTypeSpec又被定义为SimpleTypeSpec '&',SimpleTypeSpec定义为PointerTypeSpec或者ArrayTypeSpec或者TypeName。以此类推。

上一篇:2018秋寒假作业6- -PTA编程总结3


下一篇:网易云课堂_C++程序设计入门(下)_第7单元:出入虽同趣,所向各有宜 – 文件输入和输出_第7单元 - 作业2:编程互评