BNF

BNF

巴科斯範式(BNF: Backus-Naur Form 的縮寫)是由 John Backus 和 Peter Naur 首次引入一種形式化符號來描述給定語言的語法(最早用於描述ALGOL 60 程式語言)。

巴科斯範式

BNF & Augmented BNF

巴科斯範式

確切地說,早在UNESCO(聯合國教科文組織)關於ALGOL 58的會議上提出的一篇報告中,Backus就引入了大部分BNF符號。雖然沒有什麼人讀過這篇報告,但是在Peter Naur讀這篇報告時,他發現Backus對ALGOL 58的解釋方式和他的解釋方式有一些不同之處,這使他感到很驚奇。首次設計ALGOL的所有參與者都開始發現了他的解釋方式的一些弱點,所以他決定對於以後版本的ALGOL應該以一種類似的形式進行描述,以讓所有參與者明白他們在對什麼達成一致意見。他做了少量修改,使其幾乎可以通用,在設計ALGOL 60的會議上他為ALGOL 60草擬了自己的BNF。看你如何看待是誰發明了BNF了,或者認為是Backus在1959年發明的,或者認為是Naur在1960年中發明。(關於那個時期程式語言歷史的更多細節,參見1978年8月,《Communications of the ACM(美國計算機學會通訊)》,第21卷,第8期中介紹Backus獲圖靈獎的文章。這個注釋是由來自Los Alamos Natl.實驗室的William B. Clodius建議的)。

現在,幾乎每一位新程式語言書籍的作者都使用巴科斯範式來定義程式語言的語法規則。

巴科斯範式的內容

在雙引號中的字("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 ::= """ """

擴展的巴科斯範式 Augmented BNF

RFC2234 定義了擴展的巴科斯範式(ABNF)。近年來在Internet的定義中ABNF被廣泛使用。ABNF做了更多的改進,比如說,在ABNF中,尖括弧不再需要。

基本信息

尖端的節奏一族,兩種相輔相成的節奏模式

什麼是BNF

BNF靈感來源於beat up and one two party,激樂社是勁舞團另類偏門的激舞模式與領舞模式的音樂製作愛好者團隊,團隊成員匯集中國大陸與港澳台資深玩家。

BNF介紹

BNF製作Beatup模式和One Two Party模式檔案歌曲成型於2009年初,風行於2009年10月,第一個歌曲外掛程式發表於2009年10月1日,以每15天更新一版的速度奉獻給廣大玩家。隨著該團隊技術的日臻成熟與更新歌曲的不斷增加BNF作品已經得到國內外玩家的追捧。

〖自編激舞領舞〗由BNF全體成員構思創作超過70首自編的激舞領舞歌曲,其中一部分歌曲正處於修改完善中。

因有你的支持,我們才能更好的為大家帶來更新更好的作品。

〖自編激舞〗曲目保留了國服,韓服,私服眾多優秀的作品,再加上BNF自編工作室為大家帶來了新的歌曲,集百家之長融會了最新的激舞歌曲,今後BNF將不斷的更新激舞歌曲,創造屬於國服的自編時代!

〖自編領舞〗一切還原AU里所有領舞新歌,絕不刪除一首,還另添加3首自編領舞與韓服版本的4首歌曲。自編領舞作為最新的嘗試,添加的歌曲並不難,除一首NO DANCE的高級歌曲外,其餘2首都是現今流行的領舞歌曲節奏融會改編。BNF希望通過此次的嘗試能讓更多的領舞者門了解屬於領舞的自編時代.

製作成果匯集了港澳台激舞精華人物的智慧結晶.

其他含義

英國國家處方集的縮寫

相關詞條

相關搜尋

熱門詞條

聯絡我們