巴科斯范式


所属类别:技术博客

文章作者:李伟

特别推荐:免费发布信息 承包关键词~~抢爆了!HOT!


巴科斯范式(也称为巴科斯-瑙尔范式、巴克斯-诺尔范式)是一种用于表示上下文无关文法的语言,上下文无关文法描述了一类形式语言。尽管巴科斯范式也能表示一部分自然语言的语法,它还是更广泛地使用于程序设计语言、命令集、通信协议的语法表示中。大多数程序设计语言或者形式语义方面的教科书都采用巴科斯范式。在各种文献中还存在巴科斯范式的一些变体,如扩展巴科斯范式或者参数化的巴科斯范式。de:Backus-Naur-Form en:Backus-Naur form fr:Forme de Backus-Naur ja:BNF记法 nl:Backus-Naur-formalisme pl:Notacja BNF tr:Backus-Naur form什么是巴科斯范式?

巴科斯范式(BNF:Backus-NaurForm的缩写)是由JohnBackus和PeterNaur首先引入的用来描述计算机语言语法的符号集。

现在,几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法规则。巴科斯范式的内容在双引号中的字("word")代表着这些字符本身。而double_quote用来代表双引号。在双引号外的字(有可能有下划线)代表着语法部分。尖括号(<>)内包含的为必选项。方括号([])内包含的为可选项。大括号({})内包含的为可重复0至无数次的项。竖线()表示在其左右两边任选一项,相当于"OR"的意思。::=是“被定义为”的意思。巴科斯范式示例这是用BNF来定义的Java语言中的For语句的实例:for_statement::="for""("(variable_declaration(expression";")";")[expression]";"[expression]";"")"statement这是Oraclepackages的BNF定义:package_body::="package"package_name"is"package_obj_body{package_obj_body}["begin"seq_of_statements]"end"[package_name]";"package_obj_body::=variable_declarationsubtype_declarationcursor_declarationcursor_bodyexception_declarationrecord_declarationplsql_table_declarationprocedure_bodyfunction_bodyprocedure_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::=commentassignment_statementexit_statementgoto_statementif_statementloop_statementnull_statementraise_statementreturn_statementsql_statementplsql_block这是用BNF来定义的BNF本身的例子:syntax::={rule}rule::=identifier"::="expressionexpression::=term{""term}term::=factor{factor}factor::=identifierquoted_symbol"("expression")""["expression"]""{"expression"}"identifier::=letter{letterdigit}quoted_symbol::="""{any_character}"""扩展的巴科斯范式AugmentedBNF

RFC2234定义了扩展的巴科斯范式(ABNF)。近年来在Internet的定义中ABNF被广泛使用。ABNF做了更多的改进,比如说,在ABNF中,尖括号不再需要。发表于 @ 2006年09月25日 22:03:00评论(loading...AddFeedbackCountStack("1282508"))编辑新一篇:用协议分析工具学习TCP/IP 旧一篇:24部电影的人生哲理

相关信息

· UNIX下两个进程之间共享内存和信号量的用法浅析

· V4L2

· 发现一个好站点,推荐一下 (.net 开源项目)

· 中小企业局域网网络管理技巧七则








....

17089 46508