CS【1】:巴科斯范式(BNF: Backus-Naur Form)介绍与例子

太幸运了,今天考试刚刚考到,把笔记放出来哦

有时间更新一下原题

巴科斯范式

(BNF: Backus-Naur Form 的缩写)描述计算机语言语法的符号集

在双引号中的字("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

[ "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 ]

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

expression ::= term { "|" term }

term ::= factor

factor ::= identifier |

quoted_symbol |

"(" expression ")" |

"[" expression "]" |

"{" expression "}"

identifier ::= letter { letter | digit }

quoted_symbol ::= """ """

扩展的内容

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

                   听说 点赞+关注 的人三天内bug减少80%哦(///ω///)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值