必威体育Betway必威体育官网
当前位置:首页 > IT技术

BNF学习笔记

时间:2019-09-29 07:13:37来源:IT技术作者:seo实验室小编阅读:77次「手机版」
 

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源码学习笔记(1)

前言: ​ 对于muduo库,我觉得,光Linux多线程上提到的一些实现,还是不够的,在base/里面,还有/net里面提供了很多不错的实现,值得去学习,暑

ExtJs学习(一)~~ 简述概念

一、学习经历 如果想看我的学习心得、项目截图、写ExtJs专栏的目的,可以看一下以下这篇文章: https://blog.csdn.net/xiaozhegaa/a

学习C语言编译器的选择

很多初学C语言的同学可能遇到的首要问题,就是选择编译器,用什么编程软件?然而通过了解之后发现有那么多编程软件,什么VC6.0,Dev ,CodeBl

自学ps哪个网站最好?零基础怎么去学习?

现在的这个社会,photoshop也就是我们所说的ps已经被大部分工作的人所使用了,ps能用在工作的很多方面。正是因为它的广泛运用,很多人

分享到:

栏目导航

推荐阅读

热门阅读