關於給定文法g,如何產生語言l(g),將進一步給出其形式化定義。為此,首先給出一些基本術語的定義。
· 定義2.11(直接推導「→」)
有v=αa β=αγ β=w (α,β,γ∈(v
n∪vt) *),當且僅當p中存在一條規則a→y,稱v直接推導出w(或w直接歸約到v),記作:v→w。
· 定義2.12(直接推導序列)
如果存在v=a
0→a1,a
1→a2,...,a
n-1→a
n=w或a
1→a2→a
3→...→a
n-1→a
n,則v經過n步(n>0)可以推導出w,記作:v→
+w。當v→
+w或v=w,記作:v→
*w。· 定義2.13(最左(右)推導)
在推導過程中,總是對句型中的最左(右)邊的非終結符進行替換,成為最左(右)推導。
· 定義2.14(句型)
設有文法g[s],若s=
*α (α∈(v
n∪vt) *),則稱α為g[s]的句型。
· 定義2.15(句子)
設有文法g[s],若s=
*α (α∈v
t*),則稱α為g[s]的句子。
· 定義2.16(規範推導/規範句型/規範歸約)
最右推導也稱為規範推導。僅用規範推導得到的句型稱為規範句型,規範推導的逆序為規範歸約。
· 定義2.17(文法的遞迴)
若文法g存在形如αaβ→αaβ'的推導,則稱g是遞迴文法。
例2.5 設有文法g
1:e→e+e|e*e|(e)|i
有e→e……則文法g
1是直接遞迴文法。
例2.6 設有文法g
2: t→qc|c
q→rb|b
r→ta|a
有t→qc→rbc→tabc,即t→tabc,則文法g
2是間接遞迴文法。
· 定義2.18(語言)
文法g所產生的語言l(g):
l(g)=
需要指出的是,文法和語言的相互關係並非是惟一對應的,形式語言理論可以證明
(1) 給定文法g,能從結構上惟一地確定相應的語言。
(2) 給定一種語言,能確定其文法,但這種文法不是惟—則,即
l(g1)=l(g
2)=...=l(g
n) 為此,引出文法等價的概念。
· 定義2.19(文法等價)
若l(g
1)=l(g
2),則稱文法g
1和g2是等價的。
文法等價的概念說明,兩個文法儘管它們的規則不盡相同,只要所產生的語言相同,則認為這兩個文法是等價的。
例2.7 設有文法g 1g
1=,,s,}
由於存在
s→s0→s00→s000→...→s0
n-1→0
n則該文法表示的語言為 l(g
1)=設有文法g
1',g
1'=,,s,}
由於存在 s→0s→00s→000s→...→0
n-1s→0
n則該文法表示的語言為 l(g
1')=l(g
1')=l(g
1) 很顯然,g
1≠g1',但卻存在l(g
1')=l(g
1),所以文法g
1和g1'等價。
利用文法等價的概念,當討論編譯程式實現的有關問題的,某種分析技術對文法會有不同程度的限定。當文法不能滿足某種分析技術的應用條件時,需要對文法進行等價變換,使之適應相應的分析技術。一般文法等價變換是針對
*使文法適用於某種分析技術
*消除文法的二義性
*使文法類與語言類一致
*使文法滿足特殊需要
ANTLR學習心得 抄書 4
一本厚厚的305頁的書,我實在是不可能都抄在這裡的。只能揀最緊要的抄出來。而這個緊要的判斷,也是以我在讀書的過程中的理解為準,最困難的部分,自己總是想不清楚的部分,我就認為是最緊要的了。今天打算抄的是ll與lr的概念。在我看到的很多關於編譯原理的書中,都會反覆出現ll 1 lr 1 這樣的東西,這究...
BOA學習心得(3)
cgi程式是可以直接通過boa伺服器執行的,如192.168.1.100 test.cgi。原c 中通過 printf 將css樣式檔案引入cgi程式,但並沒有在編譯時將css中的內容像預編譯一樣寫進來,後期在開發板上還是應當將css檔案拷入同級目錄等,從而使得cgi程式引用。include int...
c 學習心得 3
事件與委託 段建立類的物件並在該物件上呼叫方法,此情況下,呼叫程式是主動,而物件是被動的 但是也有相反的情況,如物件執行過程中發生某些事情通知呼叫程式,此類事情稱之為事件 event z其他 段編寫一種方法接收和處理發布的事件,此過程稱之為委託 delegate 需要注意的是事件型別與委託識別符號要...