正在进行安全检测...

发布时间:2024-03-21 11:27:01   来源:文档文库   
字号:

BNF
巴科斯范式及其扩展
BNF & Augmented BNF
什么是巴科斯范式?

巴科斯范式(BNF: Backus-Naur Form 的缩写是由 John Backus Peter Naur 首次引入一种形式化符号来描述给定语言的语法(最早用于描述ALGOL 60 编程语言)。确切地说,早在UNESCO(联合国教科文组织)关于ALGOL 58的会议上提出的一篇报告中,Backus就引入了大部分BNF符号。虽然没有什么人读过这篇报告,但是在Peter Naur读这篇报告时,他发现BackusALGOL 58的解释方式和他的解释方式有一些不同之处,这使他感到很惊奇。首次设计ALGOL的所有参与者都开始发现了他的解释方式的一些弱点,所以他决定对于以后版本的ALGOL应该以一种类似的形式进行描述,以让所有参与者明白他们在对什么达成一致意见。他做了少量修改,使其几乎可以通用,在设计ALGOL 60的会议上他为ALGOL 60草拟了自己的BNF。看你如何看待是谁发明了BNF了,或者认为是Backus1959年发明的,或者认为是Naur1960年中发明。(关于那个时期编程语言历史的更多细节,参见19788月,Communications of the ACM(美国计算机学会通讯),第21卷,8期中介绍Backus获图灵奖的文章。这个注释是由来自Los Alamos Natl.实验室的William B. Clodius建议的)

现在,几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法规则。

-----------------------------------------------------------------------------
巴科斯范式的内容

在双引号中的字("word"代表着这些字符本身。而double_quote用来代表双引号。



在双引号外的字(有可能有下划线)代表着语法部分。

尖括号( < > 内包含的为必选项。

方括号( [ ] 内包含的为可选项。

大括号( { } 内包含的为可重复0至无数次的项。

竖线( | 表示在其左右两边任选一项,相当于"OR"的意思。

::= 是“被定义为”的意思。

巴科斯范式示例

这是用BNF来定义的Java语言中的For语句的实例:

FOR_STATEMENT ::=
"for" "(" ( variable_declaration |
( expression ";" | ";"
[ expression ] ";"
[ expression ] ";"
"" statement

本文来源:https://www.2haoxitong.net/k/doc/dd0c1f1d59eef8c75fbfb375.html

《正在进行安全检测....doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式