規則(重寫規則、產生式或生成式)
- 形如 α→β 或 α::=β 的(α,β)有序對,其中α稱為規則的左部,β稱為規則的右部,這里的符號 →(::=)讀作 "定義為",例如A→a讀作 “A定義為a”
- 文法 G定義為四元組(VN,VT,P,S)
- 其中VN為非終結符集(語法實體 或 變量);VT終結符集;P為規則(α→β)的集合,α∈(VN∪VT)* ,且至少包含一個非終結符,β∈(VN∪VT)*,VN,VT和P都是非空有窮集
- S稱為識別符或者開始符,它是一個非終結符,至少要在一條規則中作為左部出現
- VN 和 VT 不含公共的元素,即VN ∩ VT = Ø
- 通常用 V 表示 VN ∪ VT ,V稱為文法G的字母表或詞匯表
例2.1 有文法G=<VN,VT,P,S>,其中,VN={S},VT={0,1},P={S→0S1,S→01},這里非終結符集中只含一個元素S,終結符號集由兩個元素 0,1組成,有兩條產生式,開始符是S
該例子也可以寫成
G: S→0S1
S→01
或者
G[S]:S→0S1
S→01
例2.2 有文法G=(VN,VT,P,S),其中 VN = {標識符,字母,數字},VT = {a,b,c,...,x,y,z,0,1,...,9}
P = { <標識符>→<字母>
<標識符>→<標識符><字母>
<標識符>→<標識符><數字>
<字母>→a
<字母>→b
...
<字母>→z
<數字>→0
<數字>→1
...
<數字>→9
}
S=<標識符>
為定義文法所產生的語言,還需要引入 推導 的概念,定義 V* 中的符號之間的關系,直接推導=>,長度為n(n≥1)的推導 和長度為n(n≥0)的推導
直接推導/直接歸約的定義
- 設α→β是文法G=(VN,VT,P,S)的規則(或者是P中的一個產生式),γ 和 δ 是V*中的任意符號
- 若有符號串 v、ω滿足,v = γαδ,ω=γβδ,則說v(應用規則α→β)直接產生ω,或說ω是v的直接推導,或說ω直接歸約到v,記作v=>ω
例如,對於例2.1的文法G,可以給出一些例子
- v=0S1,ω=0011,直接推導:0S1=>0011,使用的規則:S→01,這里γ=0,δ=1
- v=S,ω=0S1,直接推導:S=>0S1,使用的規則:S→0S1,這里γ=ε,δ=ε,ε類似於群里面的幺元
- v=0S1,ω=00S11,直接推導:0S1=>00S11,使用的規則,S→0S1,這里γ=0,δ=1
對於例2.1的文法G,直接推導的例子如下
- v=<標識符> ,ω=<標識符><字母>,直接推導:<標識符>=><標識符><字母>,使用的規則:<標識符>→<標識符><字母>,這里γ=δ=ε
- v=<標識符><字母><數字>,ω=<字母><字母><數字>,直接推導:<標識符><字母><數字>=><字母><字母><數字>,使用的規則:<標識符>→<字母>,這里γ=ε,δ=<字母><數字>
- v=abc<數字>,ω=abc5,直接推導:abc<數字>=>abc5,使用的規則:<數字>→5,這里γ=abc,δ=ε
序列中的推導定義
- 如果存在直接推導的序列:v=ω0 => ω1 => ω2 => ... => ωn = ω (n>0)則稱v推導出(產生)ω(推導長度為n),或稱ω歸約到v,記作v
ω
- 若有 v
ω,或 v = ω,則記作 v
ω 對例2.1的文法,存在直接推導序列 v=S1 => 00S11 => 000S11 => 00001111 = ω,即 0S1
00001111,也可記作 0S1
00001111
- 對例2.2的文法,存在直接推導序列 v = <標識符> => <標識符><數字> => <字母><數字> => x<數字> => x1 = ω,即 <標識符>
x1
句型(推導出來的結果)和句子(僅由終結符號組成的句型)的定義
- 設G[S]是一個文法,如果符號串x是從識別符號推導出來的,即有 S
x,則稱x是文法 G[S] 的句型
- 若x僅由終結符號組成, 即 S
x,x∈V*T ,則稱x為G[S]的句子
- 例如,在例2.1中,S、0S1、000111都是例2.1的文法G的句型,其中000111是G的句子
- 在例2.2中,<標識符><字母>,<字母><數字>,a1都是例2.2文法G的句型,其中a1是G的句子
文法G產生的語言定義
- 文法G產生的語言定義為集合{x|S
x,其中S為文法識別符號,且x∈V*T},可用L(G)表示該集合
文法描述的語言是該文法一切句子(僅由終結符號組成的句型)的集合
考慮例2.1的文法G,有兩條產生式(規則):S→0S1 和 S→01,通過對第一個產生式使用 n-1 次,然后使用第二個產生式一次,得到 S=>0S1=>00S11=>...=>0n-1S1n-1=>0n1n
L(G)={0n1n|n≥1}
例題2.3
設G=(VN, VT, P, S),VN = {S, B, E}, VT = {a, b, e},P由下列產生式組成
- S→aSBE
- S→aBE
- EB→BE
- aB→ab
- bB→bb
- bE→be
- eE→ee
若L(G1) = L(G2),則稱文法G1和G2是等價的
例如文法 G[A]:
- A→0R
- A→01
- R→A1