bnf
巴科斯范式(Backus-Naur Form)是一种由Backus和Naur引入的形式化符号表示编程语言的语法。
规范
引号中的字符表示这些他们本身,quote表示引号
引号外的字符表示语法。
<>尖括号中的内容表示必选项
[] 方括号中的内容表示可选项
{} 大括号中的内容表示可重复0到无数次的项
| 竖线表示左右任选一项
:= 冒号等于时被定义为的意思
进阶
BNF经常使用递归形式,如:
<pp>:=<tt>|<tt><pp>
表示一个pp由一个或多个tt构成
举例
2017百度之星复赛1001对于Bomb Number的BNF表示
<bomb number> := <bomb term> | <bomb number> <bomb term>
<bomb term> := <number> | '(' <number> ')' '#' '(' <non-zero-digit> ')'
<number> := <digit> | <digit> <number>
<digit> := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
<non-zero-digit> := '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
digit 表示一位数字(0到9),non-zero-digit 表示一位非零数字(1到9)
number 表示一个大于等于一位的数,可以有前导零
bomb term 表示 一个number 或者 (number)#(non-zero-number)
bomb number 表示一个或多个 bomb term
2017百度之星复赛1002对于Bomb Expression的BNF表示
<bomb expression> := <bomb term> | <bomb expression> <bomb term>
<bomb term> := <bomb statement> | '(' <bomb statement> ')' '#' '(' <number> ')'
<bomb statement> := <bomb element> | <bomb statement> <bomb element>
<bomb element> := <digit> | '+' | '-' | '*'
<normal expression> := <norm term> | <normal expression> '+' <norm term> | <normal expression> '-' <norm term>
<norm term> := <number> | <norm term> '*' <number>
<number> := <digit> | <non-zero-digit> <number>
<digit> := '0' | <non-zero-digit>
<non-zero-digit> := '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
non-zero-digit 表示一位非零数字(1到9),digit 表示一位数字(0到9)
number 表示一个数,不能有前导零(可以是0)
norm term 表示 一个或多个number 用 * 相连
normal expression 表示 一个或多个norm term 用+,-相连
bomb element 表示 一位数或者一个运算符(+ - *)
bomb statement 表示一个或多个bomb element相连
bomb term 表示一个bomb statement 或者(bomb statement)#(number)
bomb expression 表示一个或多个bomb term相连
感悟
BNF是一种很规范的形式,可以将语言规范化。
相关阅读
分布式的发展史1946年情人节(2.14),世界上第一台电子数字计算机诞生在美国宾夕法尼亚大学,他的名字叫ENIAC,这台计算机占地170米,重
前言: 对于muduo库,我觉得,光Linux多线程上提到的一些实现,还是不够的,在base/里面,还有/net里面提供了很多不错的实现,值得去学习,暑
一、学习经历 如果想看我的学习心得、项目截图、写ExtJs专栏的目的,可以看一下以下这篇文章: https://blog.csdn.net/xiaozhegaa/a
很多初学C语言的同学可能遇到的首要问题,就是选择编译器,用什么编程软件?然而通过了解之后发现有那么多编程软件,什么VC6.0,Dev ,CodeBl
现在的这个社会,photoshop也就是我们所说的ps已经被大部分工作的人所使用了,ps能用在工作的很多方面。正是因为它的广泛运用,很多人