zoukankan      html  css  js  c++  java
  • 扩充巴科斯-瑙尔范式 ABNF简介

    扩充巴科斯-瑙尔范式(ABNF)是一种基于巴科斯-瑙尔范式(BNF)的元语言,但它有自己的语法和派生规则。ABNF的原动原则是描述一种作为双向通信协议的语言。

    ABNF是由第68号互联网标准("STD 68",大小写样式按照原文)定义的,也就是 RFC 5234,经常用于互联网工程任务组(IETF)通信协议的定义语言。RFC 5234 取代了 RFC 4234(取代了 RFC 2234 http://oss.org.cn/man/develop/rfc/RFC2234.txt).

     

    有关它的用途, gRPC的协议定义就是用它书写的。 https://github.com/grpc/grpc-common/blob/master/PROTOCOL-HTTP2.md 

    有关它的定义请参考:

    http://tools.ietf.org/html/rfc5234  英文

    http://blog.csdn.net/gjgsoft/article/details/7741304 

     

    规则定义与字符

    规则定义:

     

    rule = definition ;comment

    一条语句以回车换行结束。其中rule为规则名,大小写不敏感;definition为规则的具体定义;  ';'后作为注释

    定义字符


    语法:%<进制><具体数字>
    <进制>有二进制,十进制,十六进制,分别表示为 b,d,x;
    例子:       CR=%d13
                    CR=%x0D
    也可以用 空格或 '.' 连接多个字符:
                    rulename    =  %d97 %d98 %d99
    等价于       rulename    =  %d97.98.99
    最终效果相当于"abc"

    定义字符串


    字符串用双引号包括。
             command     =  "command string"

    注意:扩展巴克斯范式字符串大小写不敏感,并且这些串的字符集使用us-ascii字符集。

    因此:

            rulename = "abc"

    以及:

            rulename = "aBc"

    将与“abc”,“Abc”,“aBc”,“abC”,“ABc”,“aBC”,“AbC”和“ABC”相匹配。

    为了说明某个规则是大小写敏感的,请单独说明该规则使用的字符。

    例如:

            rulename    =  %d97 %d98 %d99

            rulename    =  %d97.98.99

    将仅与只由小写字符abc组成的串匹配。

    ;注释

    分号起始一行注释直到行末。这是一个简单的方法,用于在说明中平行地包括有用的注解。
    

    运算符

    相加

    rule=rule1 rule2; 规则相加

             foo         =  %x61           ; a
             bar         =  %x62           ; b
             mumble      =  foo bar foo    ;mumble最终效果aba

    选择(或)

    规则1 / 规则2
    由斜杠(“/”)分隔的元素是可选的。
    因此,  foo / bar
    将接受<foo>或<bar>。

     

    不定循环      

    *Rule
    在元素前的操作符“*”表示重复。完整形式为:
            <a>*<b>element
    此处<a>和<b>是可选的十进制值,表示元素出现至少<a>次,至多<b>次。
    默认值是0和无穷,因此 
    *<element>允许任何数字,包括0;
    1*<element>需要至少1; 3*3<element>只允许3
    而1*2<element>允许1或2。
     

    可选序列

    [RULE]
    方括弧包括了一个可选元素序列:
            [foo bar]
    等同于
            *1(foo bar).
    可以出现,也可以不出现.
     

    ()组合规则

    在()内的规则。对()外的规则来说,()内的规则被当作单独的规则对待。
             (foo / bar) blat
             效果相当于 foo blat / bar blat

     

     

     

    参考资料:

    ABNF(巴克斯范式)语法总结--根据RFC5234
    http://blog.csdn.net/gjgsoft/article/details/7741304

     

     
     
  • 相关阅读:
    钉钉服务器端SDK PHP版
    戒不掉
    亲历钓鱼网站
    我整理的PHP 7.0主要新特性
    JavaScript中JSON的处理心得
    X3D中Profile如何翻译
    你可以写什么?
    Gitblit中采用Ticket模式进行协作开发
    理解JavaScript中的事件处理 阻止冒泡event.stopPropagation();
    测试Remoting三种信道Http,Tcp,Ipc和Web Service的访问速度 (转)
  • 原文地址:https://www.cnblogs.com/ghj1976/p/4580611.html
Copyright © 2011-2022 走看看