扩充巴科斯-瑙尔范式 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 ...
随机推荐
- python numpy 数组中元素大于等于0的元素
>>> import numpy as np >>> a = np.random.randint(-5, 5, (5, 5)) >>> a arr ...
- PHP中操作mysql的函数
(1)mysql_num_rows(),对应select操作,获取select结果中数据集的行数:(2)mysql_affected_rows(),对应update.delete.insert操作,影 ...
- HDU 6198(2017 ACM/ICPC Asia Regional Shenyang Online)
思路:找规律发现这个数是斐波那契第2*k+3项-1,数据较大矩阵快速幂搞定. 快速幂入门第一题QAQ #include <stdio.h> #include <stdlib.h& ...
- Youke365_2_4 一处Sql注入漏洞以及一处任意文件删除
本文作者:X_Al3r Prat 0 自白 每一天都是新的一天.没啥吐槽的,步入正题 /system/category.php 文件一处Sql注入## 80-87行代码 $root_i ...
- Storm的并行度
在Storm集群中,运行Topolopy的实体有三个:工作进程,executor(线程),task(任务),下图可以形象的说明他们之间的关系. 工作进程 Storm集群中的一台机器会为一个或则多个To ...
- Rsync备份服务
一.Rsync 原理图 二.Rsync 原理描述 2.1:什么是Rsync Rsync是备份的一款软件,它可以实现全量备份.增量备份,也可以在不改变内容.属性的情况下进行同步备份,端口默认是873 2 ...
- 多维标度法(MDS)的Python实现
多维标度法(multidimensional scaling,MDS)是一种在低维空间展示“距离”数据结构的多元数据分析技术,是一种将多维空间的研究对象( 样本 或 变量 ) 简化到低维空间进行定位. ...
- 死锁、Lock锁、等待唤醒机制、线程组、线程池、定时器、单例设计模式_DAY24
1:线程(理解) (1)死锁 概念: 同步中,多个线程使用多把锁之间存在等待的现象. 原因分析: a.线程1将锁1锁住,线程2将锁2锁住,而线程1要继续执行锁2中的代码,线程2要继续执行锁1中的代码, ...
- Hadoop简介与伪分布式搭建—DAY01
一. Hadoop的一些相关概念及思想 1.hadoop的核心组成: (1)hdfs分布式文件系统 (2)mapreduce 分布式批处理运算框架 (3)yarn 分布式资源调度系统 2.hadoo ...
- C++的开源跨平台日志库glog学习研究(三)--杂项
在前面对glog分别做了两次学习,请看C++的开源跨平台日志库glog学习研究(一).C++的开源跨平台日志库glog学习研究(二)--宏的使用,这篇再做个扫尾工作,算是基本完成了. 编译期断言 动态 ...