擴展巴科斯範式是表達作為描述計算機程式語言和形式語言的正規方式的上下文無關文法的元語法符號表示法。他是由尼古拉斯·沃斯開發的。
基本介紹
- 中文名:擴展巴科斯範式
- 外文名:Extended backus paradigm
- 表達語言:描述計算機程式語言
- 地位:基本巴科斯範式的一種擴展
- 包含:可視字元、數字、標點符號
- 學科:電子工程
BNF巴科斯範式,EBNF擴展巴科斯範式,
BNF巴科斯範式
由正確程式所組成的集合是無窮的,它們不可能被枚舉,只好用程式構成的規則來定義。根據這些規則所構成的符號序列,就是語法上正確的程式,而這些規則的集合就是語言的語法。早期的程式設計語言(如FFORTRAN)的語法也是藉助於自然語言(英語)描述的。它顯得既累贅又不嚴格,且常因自然語言的含糊不清而導致模稜兩可的定義。1956年N·喬姆斯基Noam Chomsky)首次描述了形式語言,給出了一種文法的數學模型。到了1959年,他又將文法分為四類,即0型(無限止)文法、1型(上下文有關)文法、2型(上下文無關)文法和3型(正則)文法。該文法與當時他所研究的自然語言有關。
就在這一年,作為程式語言ALGOL一60十四人起草小組成員之一的巴科斯,及時發現了用2型文法嚴格定義ALGOL一60的語法結構(形式描述方法)的可能性,並為此擬定了一套完整的“元語言公式"(它是一種典型的元語言)。由起草小組另一成員丹麥人瑙爾(P·Naur)執筆的ALGOL一60報告,首次非常成功地使用這套公式嚴格描述了ALGOL-60的語法。從此,這套公式被稱為巴科斯一瑙爾形式體系(Backus Naur Form)或巴科斯範式(Backus—Normal Form),簡稱BNF。這比從前的各種語法描述方法有了質的飛躍。
形式語言是符號序列的無窮集合。這個集合的成員稱作句子。這種句子,相當於自然語言中合乎語法的正確句子。例如漢語中的每個句子具有一種結構,且由不同部分,如主語、謂語、賓語等組成。程式設計語言中的程式,則相當於形式語言中的句子。類似地,程式由一些被稱作語法實體的部分,如語句、表達式或說明等組成。
由於ALGOL一60的形式描述語法的成功,加上ALGOL-60本身的嚴謹、明晰、勻稱、完善的設計和詳細的說明,使它成為一個典型的計算機語言模型。在程式設計語言發展史上,如前所述,FORTRAN是實踐方面最重要的里程碑,而ALGOL-60貝IJ是在概念方面最重要的里程碑,《關於算法語言ALGOL-60的修正報告》,被列為計算機科學的經典文獻之一。從此,人們第一次把程式設計語言當作研究對象而不再僅僅是當作解決問題的工具。程式設計語言也因之由計算機技術上升為計算機科學。後來出現的一些有名的語言,其設計者們都明確聲稱,PASCAL是ALGOL一60的發展,而ADA則以PASCAL為基礎,可見ALGOL一60的影響之深遠。這種影響,不會因為將來ALGOL-60被淘汰而消失。
採用BNF定義語法,比用自然語言描述語法簡明得多,且為判明程式的正確結構提供了行之有效的工具。
但BNF是屬於喬姆斯基的二類文法(或稱簡單短語文法),也即上下文無關文法。它所能描述的僅僅是ALGOL一60的局部語法,即只能描述那些用來規定各個語法實體的語法。而ALGOL一60的全程語法,即規定程式書寫規則的語法,則不能用BNF來形式定義。比如“在一個分程式首部,任何一個標識符都不能被說明一次以上”,,“轉移語句不得從外面轉入過程體和循環體"等這些全程語法,就不可能用BNF來描述。因為全程語法是上、下文有關的,它不能用上、下文無關的文法來捕述。局部語法是與上、下文無關的,因而它可用上,下文無關文法來描述。
EBNF擴展巴科斯範式
EBNF體系很簡潔,它由下列兩部分構成:
(1)元語言符號(簡稱元符號)。它們如表1所示。
元符號 | 含義 |
= | 定義為。 |
| | 或。 |
() | 括弧。 |
[ ] | 括弧中的內容可出現0次或1次。 |
{} | 括弧中的內容可重複0次或限次。 |
· | 一個語法規則的結束。 |
(2)元語言表示法(簡稱元表示法)
用A,B和C表示被描述的語法成分,則元表示法由下列四條規則組成:
①並置。如果構成物A由B後跟C,即並置BC組成,則稱B和C為語法因子,並
用下列語法公式來描述A為:
A=BC.
②選擇。如果A由B或C組成(二者擇一),則稱B與C為語法項,且A表為
A=B|C.
如果有必要時,可以用圓括弧把項和因子組合起來。
③決擇。如果構成物A可能是B或者可能什麼也不是(空),則表示為
A=[B].
④重複。如果A是由任意有限個B(包括0個)的並置組成,則表示為
A={B}.
以上就是EBNF的全部內容。