跳至內容

擴展巴科斯範式

出自Taiwan Tongues 台語維基
於 2025年8月22日 (五) 19:24 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

擴展巴科斯-瑙爾範式(EBNF , Extended Backus–Naur Form)是表達作為描述計算機程式語言佮形式語言的正規範勢的上下文無關文法的元語法 ( metalanguage ) 符號表示法。伊是基本巴科斯範式 ( BNF ) 元語法符號表示法的一種擴展。

伊頭先由尼克勞斯 ・ 維爾特開發,上捷用的 EBNF 變體是由標準,特別是 ISO 抹一爿四千九百七十七所定義。

基本

擴展巴科斯範式是一種表達形式語言文法的代碼,如由終結符即可視字符、數字、標點符號、空白字符等組成的電腦程式的原始碼。

EBNF 定義共各符號序列分別指派到非結符的產生規則 :

這个產生規則定義矣佇這个指派的左端的非終結符 _ digit _。徛槓表示會當供選擇,終結符予人引號包圍,落尾綴咧分號做終止字符。所以乎 _ digit _ 是一个 " _ 零 " _ 抑無就是 " _ 一 _ 抑是 _ 二 _ 抑是 _ 三 _ 一直到 _ 九 _ 的一个 _ digit excluding zero " _。

產生規則閣會當包括弄號隔的一序列尾結符抑是非終結符 :

會當省略抑是重複的表達式會當通過花括號 { . . . } 表示 :

佇這个情形下,字符串 _ 一 _ , _ 二 _ , . . . , _ 十 _ , . . . , _ 一孵兩千三百四十五 _ , . . . 攏是正確的表達式。欲表示這種情形,佇花括號內設立的所有物件會當重複任何次,包括曷無出現。

會當選項會當通過方括號 [. . .] 表示 :

所以乎 integer 是一个零 ( _ 零 _ ) 抑是可能前導可選的負號的一个自然數。

EBNF 閣包括描述指定次數的重複,佮排除產生式的某部份抑是向 EBNF 文法插入注釋的語法。

符號表

約定

一 . 使用矣如下約束 :

  • 擴展 BNF 逐个元標識符攏被寫做用連字號連接起來的一个抑是濟字;
  • 結束於「-symbol」的元標識符是擴展 BNF 的終結符的名。

二 . 表示擴展 BNF 的每一个操作符的正常字符佮伊所蘊涵的優先級 ( 頂懸為上懸的優先級 ) 為 :

` ` `

  • repetition-symbol

-except-symbol , concatenate-symbol | definition-separator-symbol =defining-symbol

terminator-symbol

` ` `

三 . 下列括號著超越正常優先級 :

` ` ` ´ first-quote-symbol first-quote-symbol ´ " second-quote-symbol second-quote-symbol " ( * start-comment-symbol end-comment-symbol * ) ( start-group-symbol end-group-symbol ) [start-option-symbol end-option-symbol] { start-repeat-symbol end-repeat-symbol } ? special-sequence-symbol special-sequence-symbol  ? ` ` `

做例,下列語法規則展示矣表達重複的設施 :

` ` ` aa=" A " ; bb=三 * aa , " B " ; cc=三 * [aa] , " C " ; dd={ aa } , " D " ; ee=aa , { aa } , " E " ; ff=三 * aa , 三 * [aa] , " F " ; gg={ 三 * aa } , " D " ; ` ` `

遮的規則定義的終結字符合好勢 :

` ` ` aa : A bb : AAAB cc : C AC AAC AAAC dd : D AD AAD AAAD AAAAD etc . ee : AE AAE AAAE AAAAE AAAAAE etc . ff : AAAF AAAAF AAAAAF AAAAAAF gg : D AAAD AAAAAAD etc . ` ` `

示例

干焦允准價值的簡單程式語言會當用 EBNF 定義做 :

一个語法正確的程序 :

這个語言會當輕易擴展上控制流,算術表達式佮輸入 / 輸出指令。就會當開發出一个細粒仔、會當用的程式語言矣。

比較 EBNF 和 BNF

BNF 有可選項佮重複袂當直接表達的問題。作為替代,𪜶需要利用中介規則抑是兩選一規則,對可選項,定義欲按怎是空的欲按怎是可選的產生式的規則,對重複,遞歸的定義若予人重複的產生式若是家己的規則。仝款的構造猶閣會當用佇咧 EBNF 中。

會用得選項 :

可揤 BNF-風格定義做 :

抑是重複 :

可揤 BNF-風格定義做 :

EBNF 比較 BNF 的優點

EBNF 排除了 BNF 的一寡缺陷 :

  • BNF 為咱家己使用著符號 ( < , > , | ,   : :=)。當𪜶出現佇欲定義的語言內底的時陣,BNF 不得不加以修改抑是解說的使用。
  • BNF-語法佇咧行中干焦表示一个規則。

EBNF 去解決著遮的問題 :

  • 結符合予嚴格的包圍佇咧引號 ( " . . . " 抑是'. . .') 中。予非終結符的尖括號 ( " < . . . > " ) 會當省起來。
  • 通常使用終止字符分號結束一个規則。

進一步猶閣提供定義重複次數,排除法選擇 ( 譬如講除了引號的所有字符 ) 佮注釋等的增強機制。

不管所有遮的增強,EBNF 佇咧會當定義的語言的意義頂懸不比 BNF 閣較強大。佇原理上用 EBNF 定義的任何文法攏會使用 BNF 表達。但是定定致使會當閣較濟規則的表示。

EBNF 已經予 ISO 用代碼 _ ISO / IEC 一孵四千九百七十七 : 九百九十六 ( E ) _ 標準化矣。

佇咧某一寡場合任何擴展的 BNF 攏予人叫做是 EBNF。比如講 W 三 C 使用 _ one _ EBNF 來規定 XML。

擴展

依據 ISO 一石四千九百七十七標準,提供著兩个設施來擴展 EBNF。其一是佇咧 EBNF 文法部份的特殊序列,伊是佇咧問號包圍內的任意文本,其實解說超出矣 EBNF 標準的範圍。比如講,空格字符會當用若下規則定義 :

其二利用圓括號佇咧 EBNF 中袂當囥甲綴標識符仔了後的事實。伊後列毋是有效 EBNF :

所以乎 EBNF 的擴展會當使用這種表示法。比如講,佇咧 Lisp 文法內底,函數應用會當用如下規則定義 :

有關係的工課

  • W 三 C 用一種無仝的 EBNF 來指定 XML 語法。
  • British Standards Institute 佇一九八一年出版矣一个 EBNF 標準 : BS 六千一百五十四。
  • IETF 使用佇 RFC 四千兩百三十四中規定的擴充 BNF ( ABNF )。

參見

  • 擴充巴科斯的範式
  • 巴科斯範式
  • 正則表達式
  • Spirit Parser Framework
  • Wirth Syntax Notation

引用

外部連結

  • Article " EBNF : A Notation to Describe Syntax ( PDF ) " by Richard E . Pattis describing the functions and syntax of EBNF
  • Article " BNF and EBNF : What are they and how do they work ? " by Lars Marius Garshol
  • Article " The Naming of Parts " by John E . Simpson
  • ISO / IEC 一孵四千九百七十七   : 九百九十六 ( E )
  • RFC 四千兩百三十四-Augmented BNF for Syntax Specifications : ABNF
  • BNF / EBNF variants-a table by Pete Jinks comparing several syntaxes .
  • Create syntax diagrams from EBNF

本條目部份抑是全部內容出自以 GFDL 授權發佈的《自由線上電腦詞典》(FOLDOC)。