zoukankan      html  css  js  c++  java
  • 扩展巴科斯范式介绍

     扩展巴科斯范式广泛应用于计算机编程语言描述中,(在看python的format说明,看了半天没看懂,简单一点语法一般看demo就明白了,更复杂的语法没了解过这个还真难看懂).回家翻了下书,原来在<离散数学及其应用> 的计算模型那一章介绍过(还没有看到那.)

    以下是T-SQL 的SELECT语句说明:

    SELECT statement ::= 
    < query_expression > 
    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } 
    [ ,...n ] ] 
        [ COMPUTE 
            { { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,...n ] 
            [ BY expression [ ,...n ] ] 
    ] 
        [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT } 
    [ , XMLDATA ] 
    [ , ELEMENTS ] 
    [ , BINARY base64 ] 
            } 
    ] 
        [ OPTION ( < query_hint > [ ,...n ]) ] 
    
    < query expression > ::= 
        { < query specification > | ( < query expression > ) } 
        [ UNION [ ALL ] < query specification | ( < query expression > ) [...n ] ]
    
    < query specification > ::= 
    SELECT [ ALL | DISTINCT ] 
    [ { TOP integer | TOP integer PERCENT } [ WITH TIES ] ] 
    < select_list > 
    [ INTO new_table ] 
    [ FROM { < table_source > } [ ,...n ] ] 
    [ WHERE < search_condition > ] 
    [ GROUP BY [ ALL ] group_by_expression [ ,...n ] 
    [ WITH { CUBE | ROLLUP } ] 
    ] 
        [HAVING <search_condition>]
    
    
    

    --------------------------------------------------------

    < >   尖括号,用于分隔字符串,字符串为语法元素的名称,SQL语言的非终结符。

    ::=   定义操作符。用在生成规则中,分隔规则定义的元素和规则定义。 被定义的元素位于操作符的左边,规则定义位于操作符的右边。

    [ ]   方括号表示规则中的可选元素。方括号中的规则部分可以明确指定也可以省略。

    { }   花括号聚集规则中的元素。在花括号中的规则部分必须明确指定。

    |     替换操作符。 该竖线表明竖线之后的规则部分对于竖线之前的部分是可替换的。 如果竖线出现的位置不在花括号或方括号内,那么它指定对于该规则定义的元素的一个完整替换项。如果竖线出现的位置在花括号或方括号内,那么它指定花括号对或方括号对最里面内容的替换项。

    . . . 省略号表明在规则中省略号应用的元素可能被重复多次。如果省略号紧跟在闭花括号"}"之后,那么它应用于闭花括号和开花括号"{"之间的规则部分。如果省略号出现在其他任何元素的后面,那么它只应用于该元素。

    !!  介绍普通英文文本。BNF中没有表示某语法元素的定义时使用。

    空格用来分隔语法元素。多个空格和多个换行符被视为单个空格。除了上面所给的特殊用途的符号, 在规则中的其它字符和字符串表示其本义。此外,如果定义操作符右边的符号全部由BNF中的符号组成,那么这些符号仅代表其本义,不需要考虑其特殊含义。

    花括号对和方括号对内部可以任意嵌套,替换操作符可以出现在嵌套的任何地方。

    形成任何语法元素实例的字符串可能产生自该元素的BNF定义,产生过程应用以下步骤:

    1) 对于该元素,选择在产生规则右边定义的任意一个选项, 并用该选项替换该元素。

    2) 替换每个省略号和省略号所应用的一个或多个对象的实例。

    3) 对于方括号中的字符串部分, 要么删除括号和括号中的内容,要么将括号转换为花括号。

    4) 对于花括号中的字符串部分,对其子字符串应用步骤1至步骤5,然后移除花括号。

    5) 对于仍然在字符串中的非终结语法元素(如在尖括号中的名称),应用步骤1至步骤5 。
    当字符串中不再存在非终结符时,扩展过程(或产生过程)完成。

    标准中提议为正规表示的下列字符:

    用途符号表示
    定义 =
    串接 ,
    终止  ;
    分隔 |
    可选 [ ... ]
    重复 { ... }
    分组 ( ... )
    双引号 " ... "
    单引号 ' ... '
    注释 (* ... *)
    特殊序列  ? ... ?
    除外 -

    标准中提议为正规表示的下列字符:

    用途符号表示
    定义 =
    串接 ,
    终止  ;
    分隔 |
    可选 [ ... ]
    重复 { ... }
    分组 ( ... )
    双引号 " ... "
    单引号 ' ... '
    注释 (* ... *)
    特殊序列  ? ... ?
    除外 -

  • 相关阅读:
    intellij idea 修改web端口号
    intellij idea有时候有时候服务器报错500
    由于没有更新主分支的代码,总是报警
    intellij idea 快捷键
    intellij idea 修改文件名失败
    [Introduction to programming in Java 笔记] 1.3.8 Gambler's ruin simulation 赌徒破产模拟
    [Introduction to programming in Java 笔记] 1.3.7 Converting to binary 十进制到二进制的转换
    C++学习笔记-2-构造函数和析构函数
    python学习笔记--随时更新
    C++学习笔记-1-自增和自减运算符
  • 原文地址:https://www.cnblogs.com/solo/p/1871734.html
Copyright © 2011-2022 走看看