zoukankan      html  css  js  c++  java
  • 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。以此类推。

  • 相关阅读:
    C++计算器项目的初始部分
    视频教程自学计划
    1001.A+B Format (20)解题描述
    成为理想的自己
    Sample Join Analysis
    Sample MultipleFileWordcount CombineFileInputFormat
    FileOutputFormat
    Combine small files to Sequence file
    FileInputFormat
    Sample: Write And Read data from HDFS with java API
  • 原文地址:https://www.cnblogs.com/fresky/p/3163413.html
Copyright © 2011-2022 走看看