2. 標誌轉換及通用語法(notational conventions and generic grammar)
2.1 補充反饋方式(augmented bnf)
與rfc822[7]很類似,本文對所有機制的說明都是以散文和補充反饋的方式來描述的。對於實現者來說,要想理解這些約定,必須對這些符號很熟悉。補充反饋方式(augmented bnf)包括下面的結構:
要解釋的名詞=名詞解釋(name = definition)
規則的名字(name)就是它本身(不帶任何尖括號,「<」,「>」),後面跟個等號=,然後就是該規則的定義。如果規則需要用多個行來描述,利用空格進行縮排格式排版。某些基本的規則使用大寫,如sp, lws, ht, crlf, digit, alpha,等等。定義中還可以使用尖括號來幫助理解規則名的使用。
字面意思("literal")
文字的字面意思放在引號中間,除非特別指定,該段文字是大小寫敏感的。
規則1|規則2(rule1 | rule2)
「|」表示其分隔的元素是可選的,比如,「是|否」要選擇『是』或『否』。
(規則1 規則2)((rule1 rule2))
在圓括號中的元素表明必選其一。如(元素1(元素2|元素3)元素4)可表明兩種意思,即「元素1 元素2 元素4」和「元素1 元素3 元素4」
*規則(*rule)
在元素前加星號「*」表示迴圈,其完整形式是「*元素」,表明元素最少產生次,最多次。預設值是0到無限,例如,「1*元素」意思是至少有乙個,而「1*2元素」表明允許有1個或2個。
[規則]([rule])
方括號內是可選元素。如「[元素1 元素2]」與「*1(元素1 元素2)」是一回事。
n 規則(n rule)
表明迴圈的次數:「(元素)」就是「*(元素)」,也就是精確指出取值。因而,2digit 就是2位數字, 3alpha 就是由三個字母組成字串。
#規則(#rule)
「#」與「*」類似,用於定義元素列表。
完整形式是「#元素」表示至少有個至多有個元素,中間用「,」或任意數量的空格(lws-linear whitespace)來分隔,這將使列表非常方便,如「(*lws 元素 *( *lws "," *lws 元素 ))」就等同於「1#元素」。
空元素在結構中可被任意使用,但不參與元素個數的計數。也就是說,「(元素1),,(元素2)」僅表示2個元素。但在結構中,應至少有乙個非空的元素存在。預設值是0到無限,即「#(元素)」表示可取任何數值,包括0;而「1#元素」表示至少有1個;而「1#2元素」表示有1個或2個。
;注釋(; comment)
分號後面是注釋,僅在單行使用。
隱含*lws(implied *lws)
本文的語法描述是基於單詞的。除非另有指定,線性空格(lws)可以兩個鄰近符號或分隔符(tspecials)之間任意使用,而不會對整句的意思造成影響。在兩個符號之間必須有至少乙個分隔符,因為它們也要做為單獨的符號來解釋。實際上,應用程式在產生http結構時,應當試圖遵照「通常方式」,因為現在的確有些實現方式在通常方式下無法正常工作。
2.2 基本規則(basic rules)
下面的規則將用於本文後面對結構基本解析。
us-ascii 編碼字符集定義[17]。
octet = <8-bit的順序資料,即bytes>
char = < us-ascii字元(取值為0 – 127的octet)>
upalpha = < us-ascii 大寫字元"a"到"z">
loalpha =
alpha = upalpha | loalpha
digit = < us-ascii 數字"0"到"9">
ctl = < us-ascii 控制字元(取值0到31的octet )和del (127)>
cr =
lf =
sp =
ht =
<"> =
http/1.0規定,除實體主體(entity-body,見附錄b容錯應用)外,所有協議元素的行結束標誌都是crlf(按位元組順序)。在實體主體內部的行結束標誌定義及其對應的介質型別定義,見3.6節的描述。
crlf = cr lf
http/1.0的頭可以折成許多行,只要每個後續行以空格或水平製表符開頭。所有的線性空格(lws),同空格(sp)有相同的語義。
lws = [crlf] 1*( sp | ht )
實際上,有些應用並沒有考慮處理這樣多行的頭,所以從相容性上考慮,http/1.0應用最好不要產生折成多行的頭。
text規則只是用於描述訊息直譯器不關心的域的內容及其取值。文字內容可包含不同於us-ascii的字元。
text = 《除了控制字元(ctls)之外的任何octet,包括lws >
在標題域中的收件人域如包含us-ascii字符集以外的字元,這些字元將按照iso-8859-1標準來解釋。
十六進製制數字型字元在幾個協議元素中到。
hex = "a" | "b" | "c" | "d" | "e" | "f"
| "a" | "b" | "c" | "d" | "e" | "f" | digit
許多http/1.0頭域的內容由被lws分隔的單詞或特殊字元組成,這些特殊字元必須置於引號中間的字串內,作為引數值使用。
word = 符號(token)| 被引號引起來的字串
token = 1*《除控制字元(ctls)或tspecials之外的任意字元》
tspecials = "(" | ")" | "<" | ">" | "@"
| "," | ";" | ":" | "\" | <">
| "/" | "[" | "]" | "?" | "="
| "" | sp | ht
在http頭域中可用括號表示注釋文字。注釋只允許寫在包含注釋的域,做為域值定義的一部分。在除此之外其它域中,括號將被視為域值。
comment = "(" *( ctext | comment ) ")"
ctext = 《除圓括號外的任何text>
被雙引號圈中的文字字串將被視為乙個單詞。
quoted-string= ( <"> *(qdtext) <"> )
qdtext = 《除了雙引號及控制字元之外的任何字元,包括lws >
在http/1.0中不允許使用後斜線「\」來引用單字元。
4 SVG中所用到的形狀簡介 矩形
svg 有一些預定義的形狀元素,可被開發者使用和操作 標籤可用來建立矩形,以及矩形的變種。要理解它的工作原理,請把這些 拷貝到記事本,然後儲存為 rect1.svg 檔案。把此檔案放入 web目錄中 標籤可用來建立矩形,以及 矩形的變種 要理解它的工作原理,請把這些 拷貝到記事本,然後儲存為 rec...
DFS所用到的奇偶剪枝
把矩陣看成如下形式 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 0 0 1 0 1 0 1 從為 0 的格仔走一步,必然走向為 1 的格仔 從為 1 的格仔走一步,必然走向為 0 的格仔 即 從 0 走向 1 必然是奇數步,從 0 走向 0 必然是偶數...
MTK電話薄中所用到的資料結構及其在電話薄中的作用
程式就是 資料結構 演算法。了解了程式的資料結構,那麼整個系統就明白一大半了。下面關於 薄用到的比較重要的資料結構,看完應該對 薄 有個比較清晰的認識。第乙個問題 mtk系統中怎麼儲存 薄的?phonebook max pb entries 薄中最 重要的結構mmi phb entry bcd st...