巴科斯范式(,縮寫為 ),又称为巴科斯-诺尔范式(,縮寫同樣為 ,也譯为巴科斯-瑙尔范式、巴克斯-诺尔范式),是一种用于表示上下文无关文法的语言,上下文无关文法描述了一类形式语言。它是由约翰·巴科斯(John Backus)和彼得·诺尔(Peter Naur)首先引入的用来描述计算机语言语法的符号集。
尽管巴科斯范式也能表示一部分自然语言的语法,它还是更广泛地使用于程序设计语言、指令集、通信协议的语法表示中。大多数程序设计语言或者形式语义方面的教科书都采用巴科斯范式。在各种文献中还存在巴科斯范式的一些变体,如扩展巴科斯范式 EBNF 或扩充巴科斯范式 ABNF。
發展歷史
約翰·巴科斯首次在ALGOL 58中-{zh-tw:實作出;zh-cn:实现}-巴科斯範式。彼得·諾爾在ALGOL 60之中,進一步發展它的概念並將它的符號加以簡化,稱其為巴科斯範式(Backus Normal Form)。但高德納主張應稱為巴科斯-諾爾範式(Backus–Naur Form),因為它不算是一種正規形式(Normal form)。
介绍
BNF 规定是推导规则(产生式)的集合,写为:
::=
这里的 是非终结符,而表达式由一个符号序列,或用指示选择的竖杠 '|' 分隔的多个符号序列构成,每个符号序列整体都是左端的符号的一种可能的替代。从未在左端出现的符号叫做终结符。
参见
- 八篇书(使用数学结构的梵语文法)
- 扩充巴科斯范式(ABNF)
- 扩展巴科斯范式(EBNF)
- GOLD BNF分析器
- GNU bison GNU版本的Yacc
- 正则表达式
- Wirth语法表示法1977提出的对BNF的一个替代者
- Yacc分析器生成器(与Lex预处理器一起使用)
- ANTLR用Java写的另一个分析器生成器
- 上下文有关文法
- 形式文法
- 分析表达式文法
- 随机上下文无关文法
引用
外部链接
- [https://web.archive.org/web/20060925132043/https://www.lrz-muenchen.de/~bernhard/Algol-BNF.html Algol-60 BNF], the original BNF.
- Sample grammars at the [https://web.archive.org/web/20070124000335/http://cui.unige.ch/db-research/Enseignement/analyseinfo/BNFweb.html BNF Web club].
- [http://compilers.iecc.com/comparch/article/93-07-017] contains a posting on news:comp.compilers that explains some of the history of the two names (Backus-Naur form vs. Backus normal form).
- Article [http://www.garshol.priv.no/download/text/bnf.html BNF and EBNF: What are they and how do they work?] by Lars Marius Garshol.
- [ftp://ftp.rfc-editor.org/in-notes/rfc4234.txt RFC 4234] Augmented BNF for Syntax Specifications: ABNF
- [https://web.archive.org/web/20070505015526/http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html Comparision of different variants of BNF]
- [https://web.archive.org/web/20070505015817/http://www-cgi.uni-regensburg.de/~brf09510/syntax/lazyebnf.ebnf.html Syntax diagram of EBNF]
- [https://web.archive.org/web/20070505005659/http://www-cgi.uni-regensburg.de/~brf09510/syntax.html Generation of syntax diagrams from EBNF]
评论 (0)