`
kayo
  • 浏览: 560373 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

什么是巴科斯范式?

阅读更多

什么是巴科斯范式?



巴科斯范式(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 } """


分享到:
评论

相关推荐

    C、Java和Python的BNF范式

    BNF(巴科斯范式,Backus-Naur Form)是一种形式化语法的表示方法,广泛用于描述编程语言的语法结构。它由John Backus和Peter Naur在20世纪50年代末提出,旨在为ALGOL编程语言提供一个清晰的语法定义。在本资源中,...

    用预测分析表实现c子集语法分析

    在创建预测分析表之前,我们需要将这些规则转化为BNF(巴科斯范式)或EBNF(扩展巴科斯范式)的形式,这是一种形式化的表示语言的语法结构的方法。 接着,我们需要构建预测分析表。预测分析表由状态和输入符号组成...

    ISO_IEC_14977_1996(E) 信息技术 语法元语言 扩展的BNF标准(EBNF) .pdf

    信息技术 语法元语言 扩展的BNF标准(EBNF) 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集。现在,几乎每一位新编程语言书籍的作者都使用...

    BNF范式查看器

    巴科斯范式(Backus-Naur Form,简称BNF)是一种形式化的语法描述方法,广泛应用于计算机语言的定义,尤其是编译器设计领域。BNF查看器是一个专门用来解析和展示BNF范式的工具,它能够帮助用户理解和分析BNF规范,对...

    RFC2234(SIP遵循的BNF范式)

    #### 语法规范的扩展巴科斯范式:ABNF **ABNF(Augmented BNF for Syntax Specifications: ABNF)** 是一种基于传统巴科斯范式的扩展版本,用于描述语法规范。与原始的巴科斯范式相比,ABNF具有更丰富的表达能力和...

    计算机专业软件术语词典

    6. 增强型巴科斯范式(ABNF: Augmented Backus–Naur form):增强型巴科斯范式是对巴科斯范式的扩展,是一种描述上下文无关文法的内嵌语法。 知识点:增强型巴科斯范式是指一种描述上下文无关文法的内嵌语法。 7....

    b.rar_verilog ebnf

    下面我们将详细探讨递归下降分析、扩展巴科斯范式(EBNF)以及它们在Verilog中的应用。 **递归下降分析(Recursive Descent Parsing)** 递归下降分析是一种自顶向下的解析策略,它基于编程语言的语法结构,通过一...

    编译原理答案

    这部分会介绍如何使用巴科斯范式(BNF)或扩展巴科斯范式(EBNF)来定义语言的句法规则,并讲解LR、LL、LALR等解析技术。 5. **a89.doc** - 这个文档可能是第八和第九章的综合,这两章通常涵盖语义分析和中间代码...

    pl0语法分析 词法分析 语义分析

    例如,一个简单的PL/0程序可能由一系列声明、语句和函数定义组成,这些元素之间的关系可以通过BNF(巴科斯范式)或EBNF(扩展巴科斯范式)形式化表达。语法分析器的任务是验证标记流是否符合PL/0语言的语法规则,并...

    AI-201300035-方盛俊-作业41

    该作业主要涉及数据库设计的相关知识,具体包括实体关系模型(ER模型)、关系模型、函数依赖、第二范式(2NF)和第三范式(3NF)以及巴科斯范式(BCNF)。以下是这些概念的详细说明: 1. **实体关系模型**:ER模型...

    递归下降分析子程序方法实验

    这种分析方法基于上下文无关文法(Context-Free Grammar, CFG),特别是使用扩展巴科斯范式(Extended Backus-Naur Form, EBNF)来描述语言的结构。递归下降分析子程序方法实验旨在让学生深入理解这一概念,并通过...

    C++ 语法编译器 分析器

    "grammar.TXT"可能是C++的文法定义,通常以巴科斯范式(BNF)或扩展巴科斯范式(EBNF)的形式存在。文法定义了语言的规则,如语句、表达式、声明等,是编译器和分析器的基础。 "readme.txt"是常见的说明文件,通常...

    edk2-MetaDataExpressionSyntaxSpecification-release-1.30

    - **ABNF**: 增强巴科斯范式(Augmented Backus-Naur Form),一种用于描述语法结构的语言。 ##### 1.4 Target Audience 本规范的目标读者包括但不限于: - UEFI固件开发者 - EDK II构建系统维护者 - 需要理解和...

    语法分析器_编译原理_语法分析器;_collegevm5_

    在实践中,为了实现一个有效的语法分析器,开发者需要定义一套形式文法,这通常是以巴科斯范式(BNF)或扩展巴科斯范式(EBNF)的形式。这些文法定义了源代码的结构和规则。然后,根据这些文法,语法分析器将生成一...

    形式语言自动机教学参考书.pdf

    此外,巴科斯范式(BNF)和扩展巴科斯范式(EBNF)在本书中也有详细解读。这两种形式化的方法被广泛用于描述编程语言的语法结构,是编译器设计中不可或缺的工具。通过巴科斯范式,复杂的语言结构能够被分解为一系列...

Global site tag (gtag.js) - Google Analytics