日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

扩展巴科斯范式

發(fā)布時(shí)間:2023/12/10 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 扩展巴科斯范式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

擴(kuò)展巴科斯范式

維基百科,自由的百科全書(shū)

擴(kuò)展巴科斯-瑙爾范式(EBNF)是表達(dá)作為描述計(jì)算機(jī)編程語(yǔ)言和形式語(yǔ)言的正規(guī)方式的上下文無(wú)關(guān)文法的元語(yǔ)法符號(hào)表示法。它是基本巴科斯范式(BNF)元語(yǔ)法符號(hào)表示法的一種擴(kuò)展。

它最初由尼古拉斯·沃斯開(kāi)發(fā),最常用的 EBNF 變體由標(biāo)準(zhǔn),特別是 ISO-14977 所定義。

目錄

? [隱藏]
  • 1?基本
  • 2?依據(jù) ISO 的擴(kuò)展
  • 3?擴(kuò)展 BNF 的動(dòng)機(jī)
  • 4?其他增加和修改
  • 5?另一個(gè)例子
  • 6?約定
  • 7?有關(guān)工作
  • 8?參見(jiàn)
  • 9?引用
  • 10?外部鏈接

[編輯]基本

代碼,如由終結(jié)符即可視字符、數(shù)字、標(biāo)點(diǎn)符號(hào)、空白字符等組成的計(jì)算機(jī)程序的源代碼。

EBNF 定義了把各符號(hào)序列分別指派到非終結(jié)符的產(chǎn)生規(guī)則:

digit excluding zero = "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; digit = "0" | digit excluding zero ;

這個(gè)產(chǎn)生規(guī)則定義了在這個(gè)指派的左端的非終結(jié)符?digit。豎杠表示可供選擇,而終結(jié)符被引號(hào)包圍,最后跟著分號(hào)作為終止字符。所以?digit?是一個(gè)?0?或可以是?1?或?2?或?3?直到?9?的一個(gè)?digit excluding zero。

產(chǎn)生規(guī)則還可以包括由逗號(hào)分隔的一序列終結(jié)符或非終結(jié)符:

twelve = "1" , "2" ; two hundred one = "2" , "0" , "1" ; three hundred twelve = "3" , twelve ; twelve thousand two hundred one = twelve , two hundred one ;

可以省略或重復(fù)的表達(dá)式可以通過(guò)花括號(hào) { ... } 表示:

natural number = digit excluding zero , { digit } ;

在這種情況下,字符串?1,?2, ...,10,...,12345,... 都是正確的表達(dá)式。要表示這種情況,于花括號(hào)內(nèi)設(shè)立的所有東西可以重復(fù)任何次,包括根本不出現(xiàn)。

可選項(xiàng)可以通過(guò)方括號(hào) [ ... ] 表示:

integer = "0" | [ "-" ] , natural number ;

所以 integer 是一個(gè)零(0)或可能前導(dǎo)可選的負(fù)號(hào)的一個(gè)自然數(shù)。

EBNF 還包括描述指定次數(shù)的重復(fù),和排除產(chǎn)生式的某部分或向 EBNF 文法插入注釋的語(yǔ)法。

[編輯]依據(jù) ISO 的擴(kuò)展

依據(jù) ISO 14977 標(biāo)準(zhǔn),提供了兩個(gè)設(shè)施來(lái)擴(kuò)展 EBNF。其一是在 EBNF 文法部分的特殊序列,它是在問(wèn)號(hào)包圍內(nèi)的任意文本,其解釋超出了 EBNF 標(biāo)準(zhǔn)的范圍。例如,空格字符可以用如下規(guī)則定義:

space = ? US-ASCII character 32 ?;

其二利用圓括號(hào)在 EBNF 中不能放置到緊隨標(biāo)識(shí)符之后的事實(shí)。下列不是有效的 EBNF:

something = foo ( bar );

所以 EBNF 的擴(kuò)展可以使用這種表示法。例如,在 Lisp 文法中,函數(shù)應(yīng)用可以用如下規(guī)則定義:

function application = list( symbol , [ { expression } ] );

[編輯]擴(kuò)展 BNF 的動(dòng)機(jī)

BNF 有著可選項(xiàng)和重復(fù)不能直接表達(dá)的問(wèn)題。作為替代,它們需要利用中介規(guī)則或兩選一規(guī)則,對(duì)于可選項(xiàng),定義要么是空的要么是可選的產(chǎn)生式的規(guī)則,對(duì)于重復(fù),遞歸的定義要么是被重復(fù)的產(chǎn)生式要么是自身的規(guī)則。同樣的構(gòu)造仍可用在 EBNF 中。

可選項(xiàng):

signed number = [ sign , ] number ;

可按 BNF-風(fēng)格定義為:

signed number = sign , number | number ;

signed number = optional sign , number ; optional sign = ε | sign ; (* 使用 ε 來(lái)更清晰的指示空產(chǎn)生式 *)

重復(fù):

number = { digit } ;

可按 BNF-風(fēng)格定義為:

number = digit | number digit;

[編輯]其他增加和修改

EBNF 排除了 BNF 的一些缺陷:

  • BNF 為自身使用了符號(hào) (<, >, |,?::=)。當(dāng)它們出現(xiàn)在要定義的語(yǔ)言中的時(shí)候,BNF 不能不加以修改或解釋的使用。
  • BNF-語(yǔ)法在一行中只表示一個(gè)規(guī)則。

EBNF 解決了這些問(wèn)題:

  • 終結(jié)符被嚴(yán)格的包圍在引號(hào) ("..." 或 '...') 中。給非終結(jié)符的尖括號(hào) ("<...>")可以省略。
  • 通常使用終止字符分號(hào)結(jié)束一個(gè)規(guī)則。

進(jìn)一步還提供了定義重復(fù)次數(shù),排除法選擇(比如除了引號(hào)的所有字符)和注釋等的增強(qiáng)機(jī)制。

不管所有這些增強(qiáng),EBNF 在能定義的語(yǔ)言的意義上不比 BNF 更強(qiáng)大。在原理上用 EBNF 定義的任何文法都可以用 BNF 表達(dá)。但是經(jīng)常導(dǎo)致可觀的更多規(guī)則的表示。

EBNF 已經(jīng)被ISO用代碼?ISO/IEC 14977:1996(E)?標(biāo)準(zhǔn)化了。

在某些場(chǎng)合任何擴(kuò)展的 BNF 都被稱(chēng)為 EBNF。例如?W3C?使用?one?EBNF?來(lái)規(guī)定?XML。

[編輯]另一個(gè)例子

只允許賦值的簡(jiǎn)單編程語(yǔ)言可以用 EBNF 定義為:

(* a simple program in EBNF ? Wikipedia *) program = 'PROGRAM' , white space , identifier , white space ,'BEGIN' , white space ,{ assignment , ";" , white space } ,'END.' ; identifier = alphabetic character , [ { alphabetic character | digit } ] ; number = [ "-" ] , digit , [ { digit } ] ; string = '"' , { all characters ? '"' } , '"' ; assignment = identifier , ":=" , ( number | identifier | string ) ; alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G"| "H" | "I" | "J" | "K" | "L" | "M" | "N"| "O" | "P" | "Q" | "R" | "S" | "T" | "U"| "V" | "W" | "X" | "Y" | "Z" ; digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; white space = ? white space characters ? ; all characters = ? all visible characters ? ;

一個(gè)語(yǔ)法上正確的程序:

PROGRAM DEMO1 BEGINA0:=3;B:=45;H:=-100023;C:=A;D123:=B34A;BABOON:=GIRAFFE;TEXT:="Hello world!"; END.

這個(gè)語(yǔ)言可以輕易的擴(kuò)展上控制流,算術(shù)表達(dá)式和輸入/輸出指令。就可以開(kāi)發(fā)出一個(gè)小的、可用的編程語(yǔ)言了。


使用了在標(biāo)準(zhǔn)中提議為正規(guī)表示的下列字符:

用途符號(hào)表示=,?;|[ ... ]{ ... }( ... )" ... "' ... '(* ... *)?? ...??-
定義
串接
終止
分隔
可選
重復(fù)
分組
雙引號(hào)
單引號(hào)
注釋
特殊序列
除外

[編輯]約定

1. 使用了如下約定:

  • 擴(kuò)展 BNF 每個(gè)元標(biāo)識(shí)符都被寫(xiě)為用連字號(hào)連接起來(lái)的一個(gè)或多個(gè)字;
  • 結(jié)束于“-symbol” 的元標(biāo)識(shí)符是擴(kuò)展 BNF 的終結(jié)符的名字。

2. 表示擴(kuò)展 BNF 的每個(gè)操作符的正常字符和它所蘊(yùn)涵的優(yōu)先級(jí)(頂部為最高優(yōu)先級(jí))為:

* repetition-symbol - except-symbol , concatenate-symbol | definition-separator-symbol = defining-symbol ; terminator-symbol

3. 下列括號(hào)對(duì)超越正常優(yōu)先級(jí):

′ 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 ?

作為例子,下列語(yǔ)法規(guī)則展示了表達(dá)重復(fù)的設(shè)施:

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

這些規(guī)則定義的終結(jié)字符串如下:

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.

[編輯]有關(guān)工作

  • W3C?使用一種不同的 EBNF?來(lái)指定?XML?語(yǔ)法。
  • British Standards Institute?在1981年出版了一個(gè) EBNF 標(biāo)準(zhǔn):?BS 6154。
  • IETF?使用在?RFC 4234?中規(guī)定的擴(kuò)充 BNF?(ABNF)。

[編輯]參見(jiàn)

  • 擴(kuò)充巴科斯范式
  • 巴科斯范式
  • 正則表達(dá)式
  • Spirit Parser Framework
  • Wirth Syntax Notation

[編輯]引用

  • Niklaus Wirth:?What can we do about the unnecessary diversity of notation for syntactic definitions??CACM, Vol. 20, Issue 11, November 1977, pp. 822-823.
  • Roger S. Scowen: Extended BNF — A generic base standard. Software Engineering Standards Symposium 1993.
  • The?International standard?(ISO 14977) that defines the EBNF is now freely available aszipped pdf file.

[編輯]外部鏈接

  • 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 14977?: 1996(E)
  • RFC 4234?- Augmented BNF for Syntax Specifications: ABNF
  • BNF/EBNF variants?- a table by Pete Jinks comparing several syntaxes.
  • Create syntax diagrams from EBNF

本文全部或部分內(nèi)容來(lái)自以GFDL授權(quán)發(fā)布的《自由線上電腦詞典》(FOLDOC)。

轉(zhuǎn)載于:https://my.oschina.net/zengsai/blog/4642

總結(jié)

以上是生活随笔為你收集整理的扩展巴科斯范式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。