青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

擴展巴科斯范式----EBNF

擴展巴科斯-瑙爾范式(EBNF)是表達作為描述計算機編程語言形式語言的正規方式的上下文無關文法元語法符號表示法。它是基本巴科斯范式(BNF)元語法符號表示法的一種擴展。

它最初由尼古拉斯·沃斯開發,最常用的 EBNF 變體由標準,特別是 ISO-14977 所定義。

 

基本

代碼,如由終結符即可視字符、數字、標點符號、空白字符等組成的計算機程序源代碼

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

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

這個產生規則定義了在這個指派的左端的非終結符 digit。豎杠表示可供選擇,而終結符被引號包圍,最后跟著分號作為終止字符。所以 digit 是一個 0 或可以是 1 2 3 直到 9 的一個 digit excluding zero

產生規則還可以包括由逗號分隔的一序列終結符或非終結符:

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

可以省略或重復的表達式可以通過花括號 { ... } 表示:

natural number = digit excluding zero , { digit } ;

在這種情況下,字符串 1, 2, ...,10,...,12345,... 都是正確的表達式。要表示這種情況,于花括號內設立的所有東西可以重復任何次,包括根本不出現。

可選項可以通過方括號 [ ... ] 表示:

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

所以 integer 是一個零(0)或可能前導可選的負號的一個自然數。

EBNF 還包括描述指定次數的重復,和排除產生式的某部分或向 EBNF 文法插入注釋的語法。

依據 ISO 的擴展

依據 ISO 14977 標準,提供了兩個設施來擴展 EBNF。其一是在 EBNF 文法部分的特殊序列,它是在問號包圍內的任意文本,其解釋超出了 EBNF 標準的范圍。例如,空格字符可以用如下規則定義:

space = ? US-ASCII character 32 ?;

其二利用圓括號在 EBNF 中不能放置到緊隨標識符之后的事實。下列不是有效的 EBNF:

something = foo ( bar );

所以 EBNF 的擴展可以使用這種表示法。例如,在 Lisp 文法中,函數應用可以用如下規則定義:

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

擴展 BNF 的動機

BNF 有著可選項和重復不能直接表達的問題。作為替代,它們需要利用中介規則或兩選一規則,對于可選項,定義要么是空的要么是可選的產生式的規則,對于重復,遞歸的定義要么是被重復的產生式要么是自身的規則。同樣的構造仍可用在 EBNF 中。

可選項:

signed number = [ sign , ] number ;

可按 BNF-風格定義為:

signed number = sign , number | number ;

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

重復:

number = { digit } ;

可按 BNF-風格定義為:

number = digit | number digit;

其他增加和修改

EBNF 排除了 BNF 的一些缺陷:

  • BNF 為自身使用了符號 (<, >, |, ::=)。當它們出現在要定義的語言中的時候,BNF 不能不加以修改或解釋的使用。
  • BNF-語法在一行中只表示一個規則。

EBNF 解決了這些問題:

  • 終結符被嚴格的包圍在引號 ("..." '...') 中。給非終結符的尖括號 ("<...>")可以省略。
  • 通常使用終止字符分號結束一個規則。

進一步還提供了定義重復次數,排除法選擇(比如除了引號的所有字符)和注釋等的增強機制。

不管所有這些增強,EBNF 在能定義的語言的意義上不比 BNF 更強大。在原理上用 EBNF 定義的任何文法都可以用 BNF 表達。但是經常導致可觀的更多規則的表示。

EBNF 已經被ISO用代碼 ISO/IEC 14977:1996(E) 標準化了。

在某些場合任何擴展的 BNF 都被稱為 EBNF。例如 W3C 使用 one EBNF 來規定 XML

另一個例子

只允許賦值的簡單編程語言可以用 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 ? ;

一個語法上正確的程序:

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

這個語言可以輕易的擴展上控制流,算術表達式和輸入/輸出指令。就可以開發出一個小的、可用的編程語言了。


使用了在標準中提議為正規表示的下列字符:

用途

符號表示

定義

=

串接

,

終止

;

分隔

|

可選

[ ... ]

重復

{ ... }

分組

( ... )

雙引號

" ... "

單引號

' ... '

注釋

(* ... *)

特殊序列

? ... ?

除外

-

約定

1. 使用了如下約定:

  • 擴展 BNF 每個元標識符都被寫為用連字號連接起來的一個或多個字;
  • 結束于“-symbol 的元標識符是擴展 BNF 的終結符的名字。

2. 表示擴展 BNF 的每個操作符的正常字符和它所蘊涵的優先級(頂部為最高優先級):

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

3. 下列括號對超越正常優先級:

  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 = 3 * aa, "B";
cc = 3 * [aa], "C";
dd = {aa}, "D";
ee = aa, {aa}, "E";
ff = 3 * aa, 3 * [aa], "F";
gg = {3 * 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.

有關工作

 

posted on 2008-09-20 02:09 肥仔 閱讀(1632) 評論(0)  編輯 收藏 引用 所屬分類: LEX & YACC

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美精品自拍| 欧美freesex交免费视频| 午夜精品一区二区三区电影天堂| 性色av香蕉一区二区| 国产精品一区二区久久精品| 日韩午夜激情电影| 91久久精品国产91久久性色tv| 久久综合激情| 亚洲精品美女91| 亚洲伦理在线观看| 国产精品激情电影| 欧美中文字幕在线| 麻豆成人小视频| 一区二区三区欧美视频| 午夜精品视频在线观看一区二区 | 亚洲韩日在线| 欧美日本成人| 欧美国产精品专区| 国产精品入口尤物| 亚洲成人在线视频播放 | 午夜精品久久久久久久白皮肤 | 老司机免费视频一区二区三区| 亚洲性感激情| 在线观看欧美视频| 亚洲一区二区三区久久| 亚洲电影免费观看高清| 亚洲图片欧美一区| 91久久中文字幕| 亚洲欧美电影在线观看| 亚洲日韩视频| 久久一区中文字幕| 久久久国产一区二区三区| 欧美日韩国产a| 亚洲日本中文字幕| 亚洲黄色毛片| 欧美大秀在线观看| 欧美韩日一区| 亚洲另类一区二区| 欧美理论在线播放| 亚洲免费成人| 亚洲一二三区在线| 欧美日韩国产123区| 亚洲日本中文字幕| 亚洲资源在线观看| 国产精品久久久久久模特 | 国产精品入口夜色视频大尺度| 亚洲国产精品成人| 亚洲精品小视频在线观看| 理论片一区二区在线| 亚洲第一福利社区| 亚洲另类在线视频| 国产亚洲精品综合一区91| 亚洲欧美制服中文字幕| 久久午夜视频| 亚洲午夜av在线| 国内激情久久| 欧美a级大片| 亚洲深夜激情| 免费在线观看精品| 夜夜嗨av一区二区三区网页| 国产精品国产福利国产秒拍 | 亚洲综合日韩| 欧美xart系列高清| 午夜精品一区二区三区在线播放| 国产精品一区二区在线| 免费亚洲一区二区| 久久精品72免费观看| 亚洲一级片在线看| 国产精品丝袜久久久久久app| 久久av一区二区三区| 一本大道久久精品懂色aⅴ| 欧美aⅴ一区二区三区视频| 亚洲一本大道在线| 一本色道久久加勒比精品| 国产精品网曝门| 欧美网站大全在线观看| 欧美.www| 久久精品道一区二区三区| 99视频精品免费观看| 欧美成人自拍视频| 蜜桃av噜噜一区| 免费观看日韩| 欧美高清视频免费观看| 久久亚裔精品欧美| 久久婷婷国产综合尤物精品| 午夜精品久久久久影视| 亚洲视频视频在线| 99综合视频| 亚洲淫片在线视频| 香蕉久久a毛片| 久久久免费av| 亚洲观看高清完整版在线观看| 噜噜噜久久亚洲精品国产品小说| 久久另类ts人妖一区二区| 麻豆久久精品| 久久精品一区二区三区不卡牛牛 | 亚洲久久一区二区| 在线一区二区视频| 欧美中文字幕久久| 欧美日韩你懂的| 国产美女扒开尿口久久久| 国产自产精品| 中文亚洲字幕| 久久不见久久见免费视频1| 欧美国产综合视频| 性欧美在线看片a免费观看| 毛片基地黄久久久久久天堂| 欧美日韩国产美| 亚洲成色999久久网站| 亚洲在线一区二区| 亚洲电影激情视频网站| 午夜国产精品视频| 欧美三级网址| 亚洲国产欧美一区二区三区久久 | 欧美在线国产| 欧美视频在线播放| 9l视频自拍蝌蚪9l视频成人| 久久久99国产精品免费| 9人人澡人人爽人人精品| 久久婷婷人人澡人人喊人人爽| 国产精品欧美久久| 亚洲深夜福利| 亚洲午夜一级| 国产伦精品一区二区三区| 亚洲综合国产精品| 亚洲午夜视频在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲精品色图| 欧美成人一区二区三区| 亚洲欧洲一二三| 亚洲丁香婷深爱综合| 欧美韩日亚洲| 亚洲免费在线电影| 欧美亚洲专区| 亚洲激情视频在线| 99国产精品99久久久久久粉嫩| 欧美www视频| 亚洲图色在线| 羞羞漫画18久久大片| 激情av一区| 亚洲精品三级| 国产午夜精品久久久| 欧美激情精品久久久久久大尺度 | 久久av一区二区三区| 亚洲人午夜精品| 亚洲一区二区三区中文字幕 | 99av国产精品欲麻豆| 午夜亚洲影视| 日韩视频一区| 久久精品国产亚洲一区二区| 蜜桃av综合| 久久午夜精品| 亚洲国产精品电影| 亚洲一区二区黄色| 亚洲欧洲精品成人久久奇米网 | 亚洲一区免费| 日韩图片一区| 免费一级欧美在线大片| 久久青草久久| 国产一区在线视频| 亚洲欧美文学| 久久精品国产99精品国产亚洲性色 | 久久久综合网| 亚洲福利视频二区| 欧美多人爱爱视频网站| 久久国产色av| 国产欧亚日韩视频| 亚洲综合欧美| 久久一区中文字幕| 伊人久久av导航| 欧美不卡高清| 中文亚洲字幕| 欧美一区永久视频免费观看| 国产精品毛片a∨一区二区三区| 夜夜嗨av一区二区三区四季av| 国产精品99久久久久久久女警| 欧美三级网页| 性色av一区二区三区在线观看 | 一区二区三区日韩精品| 欧美另类高清视频在线| 亚洲一区二区黄| 你懂的视频一区二区| 夜夜嗨av色一区二区不卡| 国产精品二区二区三区| 久久精品最新地址| 99精品国产在热久久下载| 午夜精品久久久久| 亚洲欧洲综合| 含羞草久久爱69一区| 欧美日韩第一区日日骚| 久久精品国产91精品亚洲| 亚洲精品免费观看| 久久久久网址| 亚洲欧美日韩一区在线| 亚洲经典视频在线观看| 国产在线视频欧美一区二区三区| 欧美激情一区在线观看| 久久久久久久网站| 欧美怡红院视频| 亚洲男人天堂2024|