当前位置:首页 科普知识 巴科斯范式

巴科斯范式

发布时间:2023-09-06 14:54:26

巴科斯范式 以美国人巴科斯(Backus)和丹麦人诺尔(Naur)的名字命名的一种形式化的语法表示方法,用来描述语法的一种形式体系,是一种典型的元语言。又称巴科斯-诺尔形式(Backus-Naur form)。它不仅能严格地表示语法规则,而且所描述的语法是与上下文无关的。它具有语法简单,表示明确,便于语法分析和编译的特点。BNF表示语法规则的方式为:非终结符用尖括号括起。每条规则的左部是一个非终结符,右部是由非终结符和终结符组成的一个符号串,中间一般以“::=”分开。具有相同左部的规则可以共用一个左部,各右部之间以直竖“|”隔开。

巴科斯范式详细介绍

巴科斯范式 以美国人巴科斯(Backus)和丹麦人诺尔(Naur)的名字命名的一种形式化的语法表示方法,用来描述语法的一种形式体系,是一种典型的元语言。又称巴科斯-诺尔形式(Backus-Naur form)。它不仅能严格地表示语法规则,而且所描述的语法是与上下文无关的。它具有语法简单,表示明确,便于语法分析和编译的特点。BNF表示语法规则的方式为:非终结符用尖括号括起。每条规则的左部是一个非终结符,右部是由非终结符和终结符组成的一个符号串,中间一般以“::=”分开。具有相同左部的规则可以共用一个左部,各右部之间以直竖“|”隔开。

巴科斯范式发展历史

约翰·巴科斯首次在ALGOL 58中实现巴科斯范式。彼得·诺尔在ALGOL 60之中,进一步发展它的概念并将它的符号加以简化,称其为巴科斯范式(Backus Normal Form)。但高德纳主张应称为巴科斯-诺尔范式(Backus–Naur Form),因为它不算是一种正规形式(Normal form)。

巴科斯范式内容

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

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

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

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

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

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

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

巴科斯范式示例

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

FOR_STATEMENT ::=

"for" "(" ( variable_declaration |

( expression ";" ) | ";" )

";"

")" statement

这是Oracle packages的BNF定义:

package_body ::= "package" package_name "is"

package_obj_body

"end" ";"

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

"return" return_type

"is"

"begin"

seq_of_statements

"end" ";"

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 ::= identifier "::=" expression

expression ::= term { "|" term }

term ::= factor

factor ::= identifier |

quoted_symbol |

"(" expression ")" |

"" |

"{" expression "}"

identifier ::= letter { letter | digit }

quoted_symbol ::= """ """

巴科斯范式扩展的内容

RFC2234 定义了扩展的巴科斯范式(ABNF)。近年来在Internet的定义中ABNF被广泛使用。ABNF做了更多的改进,比如说,在ABNF中,尖括号不再需要。

温馨提示:
本文【巴科斯范式】由作者 爱百科 转载提供。 该文观点仅代表作者本人, 自学教育网 信息发布平台,仅提供信息存储空间服务, 若存在侵权问题,请及时联系管理员或作者进行删除。
(c)2008-2025 自学教育网 All Rights Reserved 汕头市灵创科技有限公司
粤ICP备2024240640号-6