什么是巴科斯范式?

本文介绍了巴科斯范式(BNF),一种用于描述计算机语言语法的符号集。通过示例展示了如何使用BNF定义Java的For语句及Oracle packages等,帮助读者理解BNF在编程语言中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是巴科斯范式?



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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值