扩充巴科斯-瑙尔范式(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

 
 

扩充巴科斯-瑙尔范式 ABNF简介的更多相关文章

  1. BNF 和 ABNF 扩充巴科斯范式 了解

    BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集.现在,几乎每一位新编程语言书籍 ...

  2. 扩充巴科斯范式(ABNF)

    BNF:巴科斯范式ABNF(Augmented Backus-Naur Form):扩充巴科斯范式 ABNF是由第68号互联网标准(”STD 68″,大小写样式按照原文)定义的,也就是 RFC 523 ...

  3. BNF 巴科斯范式

    BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集.现在,几乎每一位新编程语言书籍 ...

  4. 巴科斯范式和sql语言

    查询Mysql帮助文档,如何写SQL语句的时候,需要注意SQL语法,这里就需要知道BNF巴科斯范式. 巴科斯范式:BNF用于描述计算机语言.基本的规则如下: 尖括号<> 内包含的为必选项. ...

  5. BNF巴科斯-诺尔范式

    概述 BNF是描述编程语言的文法.自然语言存在不同程度的二义性.这种模糊.不确定的方式无法精确定义一门程序设计语言.必须设计一种准确无误地描述程序设计语言的语法结构,这种严谨.简洁.易读的形式规则描述 ...

  6. HDU 6342.Problem K. Expression in Memories-模拟-巴科斯范式填充 (2018 Multi-University Training Contest 4 1011)

    6342.Problem K. Expression in Memories 这个题就是把?变成其他的使得多项式成立并且没有前导零 官方题解: 没意思,好想咸鱼,直接贴一篇别人的博客,写的很好,比我的 ...

  7. 语法规范:BNF与ABNF 巴斯克范式

    语法规范:BNF与ABNF 巴斯克范式 BNF  巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语 ...

  8. 从http简介到网络分层及web架构

    浏览器发起HTTP请求的典型场景 a stateless application-level request/response protocol that uses extensible semant ...

  9. 2014-11-2 NOIP模拟赛1

    Noip2009 团结模拟赛如题目理解困难,请自行阅读或参考样例.内存限制均为 256MB,时间限制均为 1s.出题人不会 故意 在题目中设置陷阱,但请自己注意程序的正确性.IO 文件名(.in/.o ...

随机推荐

  1. TCP BBR - 一键安装最新内核并开启 TCP BBR

    原文地址: https://teddysun.com/489.html 最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经 ...

  2. django 实现全局支持跨域请求

    Django 实现允许跨域请求 1.安装django-cors-headers pip install django-cors-headers 2.配置settings.py文件 INSTALLED_ ...

  3. 了解Kafka

    Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统.主要设计目标如下: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能 高吞吐率. ...

  4. android应用程序的混淆打包

    android应用程序的混淆打包 1 . 在工程文件project.properties中加入下proguard.config=proguard.cfg , 如下所示: target=android- ...

  5. 四:MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...

  6. oracle case when 语句的用法详解

    1. CASE WHEN 表达式有两种形式 复制代码代码如下: --简单Case函数  CASE sex  WHEN '1' THEN '男'  WHEN '2' THEN '女'  ELSE '其他 ...

  7. spring cloud ribbon源码解析(二)

    在上一篇文章中主要梳理了ribbon的执行过程,这篇主要讲讲ribbon的负载均衡,ribbon的负载均衡是通过ILoadBalancer来实现的,对ILoadBalancer有以下几个类 1.Abs ...

  8. L09-Linux系统修改网卡名称(eth1修改为eth0)

    一.环境 VirtualBox + CentOS6.5 二.问题 有时候在克隆服务器之后配置网络时,或者在维护别人建好的服务器时,会遇到这样一种情况.如下图所示:   即:在接口配置文件ifcfg-e ...

  9. Liunx-history命令

    1. 查看历史命令执行记录 2. 查看命令cd 的历史执行记录 3. 执行历史记录中,序号为1的命令

  10. expect中使用exec执行shell命令

    今天想在expect脚本中获取本机ip,执行脚本是报错,脚本如下: set localip [exec ifconfig eth0 | grep Mask | cut -d: -f2 | awk '{ ...