`
kayo
  • 浏览: 556576 次
  • 性别: 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具有更丰富的表达能力和...

    b.rar_verilog ebnf

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

    编译原理答案

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

    SQL:SQL-92,SQL-99和SQL-2003的BNF语法

    BNF,巴科斯范式(Backus-Naur Form),是一种形式语法的表示方法,常用于描述编程语言或标记语言的语法结构。在SQL-92、SQL-99和SQL-2003中,BNF被用来精确地定义SQL的各种语句和表达式的结构,帮助开发者理解SQL的...

    AI-201300035-方盛俊-作业41

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

    北邮形式语言与自动机试题

    此外,考生可能需要理解和运用正则表达式、巴科斯范式(BNF)或扩展巴科斯范式(EBNF)来描述语言的结构。自动机的转换规则、接受状态、判定状态等问题也可能出现在这份试卷中。 第三份文档《形式语言与自动机试题....

    编译原理课件(介绍了 文法和语法的一些定义,NFA,DFA文法,LL1。,LR1等等)

    通常,我们用BNF(巴科斯范式)或EBNF(扩展巴科斯范式)来定义文法。例如,"E -&gt; E + T | T" 表示一个表达式E可以由另一个表达式E加上一个项T构成,或者直接是一个项T。 接着,**NFA(非确定性有限状态自动机)**...

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

    这种分析方法基于上下文无关文法(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构建系统维护者 - 需要理解和...

Global site tag (gtag.js) - Google Analytics