zoukankan      html  css  js  c++  java
  • 巴库斯范式

    首先讲讲这么东西是干嘛的。它的英文名叫Backus–Naur Form,简写做BNF,是用发明这种格式的两位开发者的名字所命名。RFC2234 定义了扩展的巴科斯范式(ABNF,argumented BNF)。近年来在Internet的定义中ABNF被广泛使用。ABNF做了更多的改进,比如说,在ABNF中,尖括号不再需要。

    RFC2234 标题讲的很清楚,这东西是拿来做syntax specification的,也就是描述语法、句法什么的。额,看看下面的就明白了。

    RFC2234:http://www.ietf.org/rfc/rfc2234.txt

    BNF

    BNF的一般形式是:

    <symbol> ::= __expression__ 

    即,符号(symbol)定义为(_expression_)

    其它的等效方式有:

    1、用"word"代表word本身;而用()来表示双引号。

    2、未使用双引号的字符为语法部分。

    3、<>包含的部分为必选项。

    4、[]包含的部分为可选项。

    5、{}包含的内容有不定个,可以有0个,也可以有很多个。

    6、|(竖线)表示逻辑or,即二者任含其一

    7、::=表示“定义为”,即上面提到的一般形式。 

     

    ABNF

     
    ABNF放弃了使用<>,他的定义一般形式为:
    symbol = expression crlf
    即,symbol被定义为expression,crlf表示一般的换行符。
    另定义,crlf = %d13.10,其中%d表示这是一个十进制数,13.10是两个数13和10用"."作为分隔符。
     
    可见rfc的定义事实上做了蛮多修改细化,但是更加的规范。
     
    定义:
    1、同样用"word"表示word本身。同时,引号内的字母都应是us-ascii字符,且大小写不敏感;若需区分大小写,直接用字符ascii值替代即可。
    2、/ 来表示or逻辑,而不是再是 |(竖线)

    3、后面的没兴趣翻译了,详情请见上面的RFC文档。 

    BNF举例

    下面是摘自wiki的一个例子: 

    <postal-address> ::= <name-part> <street-address> <zip-part>
     
    <name-part> ::= <personal-part> <last-name> <opt-suffix-part> <EOL> 
                        | <personal-part> <name-part>
     
    <personal-part> ::= <first-name> | <initial> "." 
     
    <street-address> ::= <house-num> <street-name> <opt-apt-num> <EOL>
     
    <zip-part> ::= <town-name> "," <state-code> <ZIP-code> <EOL>
     
    <opt-suffix-part> ::= "Sr." | "Jr." | <roman-numeral> | ""

    上面的意思是:

    1、一个邮政地址,应该依次包含:姓名 地址 邮编;

    2、一个姓名,应该依次包含personal-part last-name opt-suffix-part EOL;或者是,personal-part name-part;

    3、对剩余部分依次解释。值得注意的是zip-part里面的“,”表示这里有用","分割;而前面的会有空格隔开。

    4、<EOL>表示End Of Line,ascii里的标准字符。 

    ——————
    无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。
  • 相关阅读:
    post请求返回404
    启动网关服务报错 Unable to find GatewayFilterFactory with name RequestRateLimiter
    数据库远程连接linux报错2003 can't connect to MySQL server on ip (0) 防火墙没有开放端口3306
    idea下maven项目打包部署到tomcat服务器
    修改Idea背景色
    20种源代码测试工具
    作为一名测试工程师,需要具备哪些能力
    Android自动化测试工具——monkey简介及入门
    appium关于定位元素
    appium testcase2
  • 原文地址:https://www.cnblogs.com/pied/p/2724633.html
Copyright © 2011-2022 走看看