擴充套件Backus Naur正規化簡介

2021-10-08 03:08:44 字數 2704 閱讀 1206

擴充套件backus-naur正規化是一種電腦科學的元語法,用於定義許多網際網路協議,包括sip。它的原始定義規範是在rfc 822,說明如何解析文字訊息。最新定義版本是rfc 5234。abnf使用乙個7位的ascii字符集,並定義了字串的匹配規則。

例如:message = request / response

上面表示式定義了一條名為message的規則,它是根據其它兩條規則request和response推導定義的。其中的斜槓「/」表示一種選擇,表示message既可以是request,也可以是response。abnf的基本規則如下:

name = elements; comment crlf

其中name表示規則的名字,規則元素跟在等號後面。注釋以分號( ; )開始,一直持續到行尾,並以回車換行符(crlf)結束。元素可以是簡單的字串,例如:

element1 = 「test」

element2 = 「test」

element3 = 「test」

規則定義中使用字串實際上是大小寫不敏感的。因此,上述的element1,element2,和element3都是等價的。較新的abnf擴充套件,允許指定為大小寫敏感。例如:

element4 = %s 「test」

element5 = %s 「test」

element6 = %s 「test」

以上三條定義會嚴格匹配大小寫,而接下來的三條定義:element7、element8,和element9,等效於之前的element1、element2和element3。

element7 = %i 「test」

element8 = %i 「test」

element9 = %i 「test」

在abnf中,單個ascii字元通常以十六進製制編碼,並加上乙個百分號字首。例如:

value1 = %x61 ;

a value2 = %x65 ; a

規則value1 匹配小寫字母a,而value2匹配大寫字母a。可以指定乙個取值範圍,用連字元-連線:

digit = %x30-39 ; digits 「0」 through 「9」

abnf裡,把規則放在一起表示串聯:

element5 = value1 value2 ; aa

abnf中的分組用括號()括起來,並視為單個元素。可選規則用方括號括起來。規則可以重複引用,如表1所示。

表2給出abnf的優先順序順序規則。例如:

「a」 / 「b」 「c」 匹配「a」 或「bc」 但不匹配「ac」

(「a」 / 「b」) 「c」 匹配「ac」 或「bc」 但不匹配 「a」

*(「a」 「b」) 「c」 匹配「ababc」 但不匹配 「aaabc」

表 3 是乙個abnf例項,它是sip的host規則的簡化版本。這條規則允許host配置為網域名稱或者ipv4位址,或ipv6位址。比如說,ese.wustl.example與規則匹配,但ese..example就不行。對於ipv4位址,以點號「.」分隔的任意四組三位數組合,都與規則ipv4address匹配。

表1

abnf 重複例項

2*3 rule

rule可以出現兩到三次

*4 rule

rule 最多可以出現四次

3 rule

rule 必須出現三次

*rule

rule 可以出現任意次數,包括零次

表2

abnf 優先順序順序

strings, names formation

comment

value range

repetition

grouping, optional

concatenation

alternative

表3

abnf 例項:定義主機名host

host

= hostname/ipv4address/ipv6ref

hostname

= *( domainlabel 「.」 ) toplabel [ 「.」 ]

domainlabel

= alphanum/ alphanum *( alphanum / 「-」 ) alphanum

toplabel

= alpha / alpha *( alphanum / 「-」 ) alphanum

ipv4address

= 1*3digit 「.」 1*3digit 「.」 1*3digit 「.」 1*3digit

ipv6ref

= 「[「 ipv6address 「]」

ipv6address

= hexpart [ 「:」 ipv4address ]

hexpart

= hexseq / hexseq 「::」 [ hexseq ] / 「::」 [ hexseq ]

hexseq

= hex4 *( 「:」 hex4)

hex4

= 1*4hexdig

alphanum

= alpha / digit

alpha

= %x41-5a / %x61-7a ; a-z / a-z

digit

= %x30-39 ; 0-9

hexdig

= digit / 「a」 / 「b」 / 「c」 / 「d」 / 「e」 / 「f」

LVM擴充套件磁碟(簡)

1.檢視磁碟空間 fdisk l 2.剩餘磁碟空間新增的lvm卷 2.1 fdisk dev sda 選擇物理磁碟 2.2p 檢視磁碟分割槽 2.3n 建立乙個新分割槽 2.4p 建立分割槽為主分割槽 2.5 3 sda分割槽已經被分出1 2了,按照順序分3即可 2.6回車 磁碟起始位置 2.7回車...

擴充套件巴科斯正規化

維基百科,自由的百科全書 擴充套件巴科斯 瑙爾正規化 ebnf 是表達作為描述計算機程式語言 和形式語言 的正規方式的上下文無關文法 的元語法 符號表示法。它是基本巴科斯正規化 bnf 元語法 符號表示法的一種擴充套件。它最初由尼克勞斯 維爾特 開發,最常用的 ebnf 變體由標準,特別是 iso ...

資料庫設計三大正規化簡析

為了建立冗餘較小 結構合理的資料庫,設計資料庫時必須遵循一定的規則。在關係型資料庫中這種規則就稱為正規化。正規化是符合某一種設計要求的總結。要想設計乙個結構合理的關係型資料庫,必須滿足一定的正規化。在實際開發中最為常見的設計正規化有三個 1 第一正規化 確保每列保持原子性 第一正規化是最基本的正規化...