扩充巴科斯-瑙尔范式 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
扩充巴科斯-瑙尔范式 ABNF简介的更多相关文章
- BNF 和 ABNF 扩充巴科斯范式 了解
BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集.现在,几乎每一位新编程语言书籍 ...
- 扩充巴科斯范式(ABNF)
BNF:巴科斯范式ABNF(Augmented Backus-Naur Form):扩充巴科斯范式 ABNF是由第68号互联网标准(”STD 68″,大小写样式按照原文)定义的,也就是 RFC 523 ...
- BNF 巴科斯范式
BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集.现在,几乎每一位新编程语言书籍 ...
- 巴科斯范式和sql语言
查询Mysql帮助文档,如何写SQL语句的时候,需要注意SQL语法,这里就需要知道BNF巴科斯范式. 巴科斯范式:BNF用于描述计算机语言.基本的规则如下: 尖括号<> 内包含的为必选项. ...
- BNF巴科斯-诺尔范式
概述 BNF是描述编程语言的文法.自然语言存在不同程度的二义性.这种模糊.不确定的方式无法精确定义一门程序设计语言.必须设计一种准确无误地描述程序设计语言的语法结构,这种严谨.简洁.易读的形式规则描述 ...
- HDU 6342.Problem K. Expression in Memories-模拟-巴科斯范式填充 (2018 Multi-University Training Contest 4 1011)
6342.Problem K. Expression in Memories 这个题就是把?变成其他的使得多项式成立并且没有前导零 官方题解: 没意思,好想咸鱼,直接贴一篇别人的博客,写的很好,比我的 ...
- 语法规范:BNF与ABNF 巴斯克范式
语法规范:BNF与ABNF 巴斯克范式 BNF 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语 ...
- 从http简介到网络分层及web架构
浏览器发起HTTP请求的典型场景 a stateless application-level request/response protocol that uses extensible semant ...
- 2014-11-2 NOIP模拟赛1
Noip2009 团结模拟赛如题目理解困难,请自行阅读或参考样例.内存限制均为 256MB,时间限制均为 1s.出题人不会 故意 在题目中设置陷阱,但请自己注意程序的正确性.IO 文件名(.in/.o ...
随机推荐
- 理解js事件冒泡事件委托事件捕获
js事件冒泡 javascript的事件传播过程中,当事件在一个元素上出发之后,事件会逐级传播给先辈元素,直到document为止,有的浏览器可能到window为止,这就是事件冒泡现象. <di ...
- js有关数组的函数
map()和filter()函数 js的数组迭代器函数map和filter,可以遍历数组时产生新的数组,和python的map函数很类似1)filter是满足条件的留下,是对原数组的过滤(筛选):2) ...
- fullpage.js与animate.css搭配使用
jquery的fullpage.js插件的使用 https://alvarotrigo.com/fullPage/#3rdPage 官网 https://github.com/alvarotrig ...
- Kubernetes使用GlusterFS实现数据持久化
k8s中部署有状态应用等需要持久化数据的应用,必不可少得用存储,k8s支持很多中存储方案,我司目前使用的存储有glusterfs(分为容器化和裸机方式).nfs供应用选用,本次就简单实战下gluste ...
- yolov3源码分析keras(一)数据的处理
一.前言 本次分析的源码为大佬复现的keras版本,上一波地址:https://github.com/qqwweee/keras-yolo3 初步打算重点分析两部分,第一部分为数据,即分析图像如何做等 ...
- 启动Storm各个后台进程
启动Storm的所有后台进程.和Zookeeper一样,Storm也是快速失败(fail-fast)的系统,这样Storm才能在 任意时刻被停止,并且当进程重启后被正确地恢复执行.这也是为什么Stor ...
- Linq基础知识小记四之操作EF
1.EF简介 EF之于Linq,EF是一种包含Linq功能对象关系映射技术.EF对数据库架构和我们查询的类型进行更好的解耦,使用EF,我们查询的对象不再是C#类,而是更高层的抽象:Entity Dat ...
- Oracle 中分组排序取值的问题
整理一下排序: 建表语句:create table EXAM( name VARCHAR2(32), subject VARCHAR2(32), score INTEGER)数据:IN ...
- Mina的服务器
(一) package testMina; import java.io.IOException; import java.net.InetSocketAddress; import java.nio ...
- WPF开发的彩票程序(练手好例子)
前言 WPF是.NET最新的界面开发库,开发界面非常灵活!但是学习WPF难度也非常大. 应朋友之邀,编写了一个小程序.程序虽小,五脏俱全,WPF开发的灵活性可窥见一斑. 对于新手学习有很好的借鉴意义, ...