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

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>
            91久久久久久| 亚洲理伦电影| 在线中文字幕一区| 最新成人在线| 中文日韩电影网站| 午夜视频久久久| 欧美亚洲在线视频| 欧美一区观看| 欧美激情亚洲综合一区| 欧美激情按摩| 亚洲免费黄色| 欧美制服丝袜第一页| 久久人人爽人人爽爽久久| 免费在线国产精品| 欧美日精品一区视频| 国产日韩欧美| 亚洲激情在线观看| 亚洲女同在线| 欧美激情按摩在线| 午夜精彩国产免费不卡不顿大片| 久久一区二区三区超碰国产精品| 欧美日韩亚洲一区| 亚洲欧美日韩一区二区在线| 国产一区二区在线观看免费播放 | 性久久久久久久| 久久一区二区三区超碰国产精品| 欧美日韩国产一中文字不卡 | 欧美日韩八区| 国内精品一区二区三区| 亚洲免费精彩视频| 久久九九国产| 中文在线资源观看网站视频免费不卡| 久久精品1区| 欧美视频官网| **性色生活片久久毛片| 亚洲作爱视频| 亚洲第一精品夜夜躁人人爽| 亚洲三级视频| 久久久99免费视频| 国产精品户外野外| 亚洲国产精品女人久久久| 久久福利资源站| 亚洲视频在线二区| 欧美久色视频| 亚洲三级电影全部在线观看高清| 久久精品国产综合| 亚洲图片激情小说| 欧美特黄一区| 亚洲视频在线观看三级| 亚洲国产一区二区三区青草影视| 久久成人18免费网站| 国产精品久久久久久久久婷婷| 亚洲精品一区二区三区婷婷月| 久久综合久久综合久久| 亚洲欧美国产另类| 国产精品亚洲精品| 欧美在线观看视频在线| 亚洲视频在线播放| 国产精品婷婷午夜在线观看| 亚洲影音一区| 亚洲综合首页| 国内精品写真在线观看| 久久综合九色综合欧美狠狠| 欧美一级淫片aaaaaaa视频| 国产精品一区免费视频| 亚洲永久视频| 亚洲视频在线观看网站| 国产精品日韩一区二区| 午夜久久电影网| 午夜精品区一区二区三| 国模吧视频一区| 免费一区二区三区| 欧美成人午夜剧场免费观看| 日韩视频在线免费观看| 9久草视频在线视频精品| 国产精品theporn| 久久国产精品久久久| 久久精品免费看| 亚洲欧美国产视频| 久久精品国产99精品国产亚洲性色| 国产精品视频xxxx| 久久先锋影音av| 欧美大胆人体视频| 中文欧美在线视频| 欧美伊人久久| 亚洲国产精品精华液网站| 亚洲欧洲午夜| 国产欧美精品| 亚洲高清在线精品| 国产精品美女久久久浪潮软件 | 亚洲国产精品成人久久综合一区| 欧美华人在线视频| 欧美一区二区视频在线| 久久青草欧美一区二区三区| 一本大道久久a久久精二百| 亚洲天堂成人| 亚洲高清电影| 亚洲一区二区三区视频播放| 尤物99国产成人精品视频| 99国产精品久久久久老师| 狠狠综合久久av一区二区小说| 麻豆成人在线播放| 欧美女主播在线| 老司机免费视频一区二区| 欧美视频精品在线观看| 蜜月aⅴ免费一区二区三区| 欧美日韩精品综合| 久久国产欧美| 国产精品v欧美精品∨日韩| 欧美激情亚洲精品| 国产欧美韩国高清| 在线一区亚洲| 亚洲国产一区二区三区在线播 | 国产日韩欧美综合| 99视频有精品| 亚洲伦理在线| 老司机aⅴ在线精品导航| 欧美一区二区视频在线| 欧美香蕉视频| 亚洲精品影院在线观看| 亚洲激情二区| 久久综合国产精品| 久久久久欧美精品| 国产精品综合| 亚洲五月六月| 亚洲一区二区精品在线| 欧美国产日韩免费| 欧美激情综合| 亚洲黄色三级| 美女精品网站| 免费观看不卡av| 国内精品国产成人| 亚洲欧美激情视频| 亚洲香蕉在线观看| 欧美日韩精选| 亚洲精品国产精品久久清纯直播| 1024欧美极品| 老司机精品视频网站| 欧美日韩精品一区二区三区四区 | 一区二区三区四区五区视频| 亚洲欧洲日韩在线| 欧美电影免费观看高清| 欧美ed2k| 亚洲美女色禁图| 欧美美女bb生活片| 亚洲婷婷在线| 欧美专区第一页| 在线免费观看日本一区| 欧美+亚洲+精品+三区| 亚洲精品裸体| 亚洲欧美精品中文字幕在线| 国产精品久久久久久av下载红粉 | 亚洲免费av片| 欧美色123| 久久狠狠婷婷| 亚洲激情av| 亚洲——在线| 黑人一区二区三区四区五区| 欧美 日韩 国产一区二区在线视频| 亚洲精品国偷自产在线99热| 午夜精品福利在线| 一区二区视频免费完整版观看| 免费中文字幕日韩欧美| 99国产精品国产精品毛片| 性娇小13――14欧美| 黄色成人小视频| 欧美久久久久久| 久久不射网站| av成人老司机| 免费亚洲电影在线| 欧美一区二区福利在线| 在线不卡亚洲| 国产精品视频免费观看| 免费视频一区二区三区在线观看| 一区二区三区高清不卡| 麻豆精品视频在线观看视频| 一区二区电影免费在线观看| 国产一区二区久久精品| 欧美日本簧片| 鲁大师成人一区二区三区| 在线一区欧美| 亚洲激情成人网| 蜜臀va亚洲va欧美va天堂| 午夜欧美不卡精品aaaaa| 亚洲国产专区| 激情欧美一区| 国产日韩三区| 国产精品你懂的| 欧美成人精品三级在线观看 | 在线一区观看| 亚洲经典一区| 欧美大香线蕉线伊人久久国产精品| 亚洲欧美日韩综合aⅴ视频| 亚洲国产精品久久久久婷婷老年 | 激情国产一区| 国产乱码精品一区二区三区五月婷| 欧美电影电视剧在线观看| 久久精品女人| 久久gogo国模啪啪人体图| 亚洲性视频h|