[转载]巴科斯-诺尔(BNF范式)范式
(2018-11-12 14:36:44)
					
											标签:
																				
                            转载 | 
					
www:  
巴科斯范式是一种用形式化符号精确描述程序设计语言的语法的一种形式系统。又称巴科斯-诺尔形式,简称BNF范式。
 
 
BNF范式的产生规则
BNF的元符号
::= 
| 
< > 
 
说明:
1、
每个规则中只包含一个::=符号,它将规则分为左右两部分。左边表示一个非终结符号(代表某个语法成分,通常对应有确定含义),也就是说它可以被"::="右边的部分所替换。非终结符号必须用"<"和">"括起来表示它是一个非终结符号。右边是由非终结符或“|”与终结符组成的一个符号串,或由“|”隔开的几个这样的符号串。这里终结符指程序设计语言字符集的基本字符。
2、
由一串非终结符和以其字面意义出现在规则中终结符所组成。竖线"|"可以用在两个符号(包括终结符和非终结符)中间,表示使用"|"左边或右边的符号均可。
3、 "::="被定义的非终结符可以出现在"::="右边的中,表示递归定义。
 
 
 
 
 
引入扩展符号的BNF范式
有些学者为了方便使用引入了一些扩展符号:
 
字符
含义
[…]
可选项
{…}
重复项(可重复0或多次)
(…)
组合项
:n:n
后缀表示范围,如::1:8,表示“用1到8个字符命名”
“
双引号内的字符表示这些字符本身,要表示双引号要用如下形式:” ” ”
 
例: 使用扩展符号定义的一个语法
syntax 
rule 
expression
::= 
term 
factor 
 
 
 
 
identifier
::= 
quoted_symbol ::= """ { any_character } """
ABNF
 
 
其中,“name”是规则名,“=”表示“定义为”,“elements”是一个或多个规则名或终结符,“crlf’是回车换行,表征一行的结束。
与BNF不同,ABNF中的中括号(“<”,“>”)不再需要。
ABNF有多种操作符,其中有四种基本的操作符:连接、选择、循环和可选项。
1. 连接
格式: 
通过列出一系列规则名,一条规则可用于定义一个简单有序的值串--即,一连串邻接的字符。例如: 
 
 
 
因此规则与小写字符串"aba"匹配。
2.选择
格式: 规则1 / 规则2
由斜杠(“/”)分隔的元素是可选的。
因此,foo / bar将接受或。
选择又包括增式选择和值域选择两种
(1)增式选择 
格式: 规则1 =/ 规则2
通过稍后的规则定义增加选择集,一个初始规则可能匹配一个或多个选择。
 
如: 
ruleset 
ruleset 
ruleset 
与以下说明相同: 
ruleset 
(2)值域选择 
格式: %c##-##
通过使用连字符(“-”)表明可选值域的方式,可以紧缩说明可选数值域。
 
等同于: 
 
连接的数值和数值域不能在同一串中说明。一个数值可以用点号连接或使用连字符说明一个值域。因此,为了在行序列结束之间说明一个可打印的字符,说明格式如下: 
 
3. 循环
(1)不定循环
格式: 
在元素前的操作符“*”表示重复。完整形式为:
 
其中和是可选的十进制值,表示元素出现至少次,至多次。默认值是0和无穷,因此:
*允许重复任意次,包括0
1*需要至少1次;
3*3只允许3次
而1*2允许1或2次。
(2)指定循环
格式: 
等同于 
即,正好出现次。
因而2DIGIT是一个2位数,而3ALPHA是一个3字母字符串。
4.
可选序列 
格式: 
方括号包括了一个可选元素序列: 
 
即foo bar出现0次或者1次
ABNF还规定了其他一些符号:
注释 
分组 
BNF范式的特点
1、BNF范式主要用来描述给定语言的语法规则,具有简单、清晰、明确和普适等特点
2、用BNF符号系统可以用形式化地用数学符号、逻辑符号描述程序语法,使得算法描述标准化 
3、每一个BNF均可转化为语法图

加载中…