注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天马行空

宠辱不惊,闲看庭前花开花落;去留无意,漫观天外云展云舒……

 
 
 

日志

 
 
 
 

巴克斯范式  

2012-05-04 16:20:46|  分类: LINUX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

本文为转载,原文地址:http://blog.csdn.net/yethyeth/article/details/1491150

BNF是为了描述ALGOL 60语言而出现的。 

http://www.blog.edu.cn/user1/18646/archives/2005/139037.shtml

巴科斯范式及其扩展

BNF & Augmented BNF    
      
     什么是巴科斯范式? 
   
  巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集。
  现在,几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法规则。    
      
     巴科斯范式的内容  

在双引号中的字("word")代表着这些字符本身。而double_quote用来代表双引号。
在双引号外的字(有可能有下划线)代表着语法部分。 
尖括号( < > )内包含的为必选项。 
方括号( [ ] )内包含的为可选项。 
大括号( { } )内包含的为可重复0至无数次的项。 
竖线( | )表示在其左右两边任选一项,相当于"OR"的意思。 
::= 是“被定义为”的意思。 
   
     巴科斯范式示例  

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

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

         这是Oracle packages的BNF定义:

package_body ::= "package" package_name "is" 
package_obj_body { package_obj_body } 
[ "begin" seq_of_statements ] 
"end" [ package_name ] ";"

package_obj_body ::= variable_declaration 
| subtype_declaration 
| cursor_declaration 
| cursor_body 
| exception_declaration 
| record_declaration 
| plsql_table_declaration 
| procedure_body 
| function_body

procedure_body ::= "procedure" procedure_name 
[ "(" argument { "," argument } ")" ] 
"return" return_type 
"is" 
[ "declare" declare_spec ";" { declare_spec ";" } ] 
"begin" 
seq_of_statements 
[ "exception" exception_handler { exception_handler } ] 
"end" [ procedure_name ] ";"

statement ::= comment 
| assignment_statement 
| exit_statement 
| goto_statement 
| if_statement 
| loop_statement 
| null_statement 
| raise_statement 
| return_statement 
| sql_statement 
| plsql_block

    这是用BNF来定义的BNF本身的例子:

syntax     ::=  { rule }
rule       ::=  identifier  "::="  expression
expression ::=  term { "|" term }
term       ::=  factor { factor }
factor     ::=  identifier |
                quoted_symbol |
                "("  expression  ")" |
                "["  expression  "]" |
                "{"  expression  "}"
identifier ::=  letter { letter | digit }
quoted_symbol ::= """ { any_character } """

     
     扩展的巴科斯范式 Augmented BNF  
  
  RFC2234 定义了扩展的巴科斯范式(ABNF)。近年来在Internet的定义中ABNF被广泛使用。ABNF做了更多的改进,比如说,在ABNF中,尖括号不再需要。  
rfc2234:
http://www.rfc-editor.org/cgi-bin/rfcdoctype.pl?loc=RFC&letsgo=2234&type=ftp&file_format=txt


更多资源:
http://www-128.ibm.com/developerworks/cn/java/j-diag/part19/index.html

 

What is BNF notation?

http://cui.unige.ch/db-research/Enseignement/analyseinfo/AboutBNF.html#Marcotty86
(包括BNF的历史和较早的文献)

 

answers.com上的介绍:

http://www.answers.com/topic/backus-naur-form-3

有很多有意义的文献:

 

 

One syntax for specifying BNF grammars can be found in RFC 2234. Another can be found in the ISO 14977 standard.

 

 

相当简洁,全面的BNFEBNF定义(!!!!):

http://www-cgi.uni-regensburg.de/~brf09510/backus_naur_wirth.html 

 

EBNF的国际标准ISO 14977

http://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf

 

 

BNF多个版本的比较

http://www-cgi.uni-regensburg.de/~brf09510/grammartypes.html

 

Augmented BNF for Syntax Specifications: ABNF

ftp://ftp.rfc-editor.org/in-notes/rfc4234.txt

  评论这张
 
阅读(591)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018