1、文法的形式化定義算法
(1)G=(,,P,S)ide
:終結符集合,終結符是文法所定義的語言的基本符號,有時也稱token,例如:={Apple,boy,eat,little}設計
:非終結符集合,非終結符是用來表示語法成分的符號,有時也稱爲「語法變量」,例如: ={<句子>,<名詞短語>,<動詞短語>,····}3d
注意: ∩=Φ ∪ :文法符號集。code
P:產生式集合,產生式描述了將終結符和非終結符組合成串的方法產生式的通常形式:α→β 讀做:α定義爲β(或由·····組成)blog
α∈(∪ )+,且α中至少包含VN中的一個元素:稱爲產生式的頭(head)或左部(left side)token
β∈(∪ )* :稱爲產生式的體(body)或右部(right side)字符串
S:開始符號,S∈。開始符號表示該文法中最大的語法成分,例如:S=<句子>it
(2)產生式的簡寫:對一組有相同左部的α產生式α→β1 , α→β2 , … , α→βn程序設計
能夠簡記爲:α→β1 | β2 | … | βn
讀做:α定義爲β1,或者β2,…,或者βn ,β1,β2,…,βn稱爲α的候選式(Candidate)
(3)符號的約定
下述符號是終結符:字母表中排在前面的小寫字母,如 a、b、c;運算符,如 +、*等;標點符號,如括號、逗號等;數字0、一、. . . 、9;粗體字符串,如id、if等。
下述符號是非終結符:字母表中排在前面的大寫字母,如A、B、 C;字母S。一般表示開始符號;小寫、斜體的名字,如 expr、stmt等;表明程序構造的大寫字母。如E(表達式)、T(項)和F(因子)
除非特別說明,第一個產生式的左部就是開始符號。
2、語言的形式化定義
推導:
給定文法G=(,,P,S),若是 α→β ∈ P,那麼能夠將符號串γαδ中的α替換爲β,也就是說,將γαδ 重寫(rewrite)爲γβδ,記做 γαδ => γβδ。此時,稱文法中的符號串 γαδ 直接推導(directly derive)出 γβδ,也就是用產生式的右部替換產生式的左部。
例:推導與歸約的過程
歸約:就是用產生式的左部替換產生式右部的過程
句子和句型:
若是S=>*α,α∈(∪ )*,則稱α是G的一個句型。一個句型既能夠包含終結符,又能夠包含非終結符,也多是空串
若是S=>*w,w∈*,則稱w是G的一個句子,句子是不包含非終結符的句型
問題:有了文法(語言規則),如何斷定某一詞串是不是該語言的句子?
解答:1、從生產語言角度,由該文法推導出這一詞串
2、從識別語言角度,由該詞串歸約出次文法
由文法G開始符號S推導出的全部句子構成的集合稱爲文法G生成的語言,記爲L(G),即L(G)={w|S=>*w,ww∈*}
語言上的運算:
例:令L={A,B,…,Z,a,b,…,z},D={0,1,…,9}。則L(L∪D)*表示的語言是標識符。
3、文法的分類
喬姆斯基將文法分爲四種類型:0型,1型,2型,3型。
1.0型文法 α → β
無限制文法/短語結構文法(PSG):∀α → β∈P, α中至少包含1個非終結符
0型語言:由0型文法G生成的語言L(G)
2.1型文法 α → β
上下文有關文法(CSG):在0型文法的基礎上,∀α → β∈P,|α|≤|β| ,產生式的通常形式: α1Aα2 → α1βα2 ( β≠ε ) ,不包含ε-產生式
上下文有關語言(1型語言):由上下文有關文法(1型文法)G生成的語言L(G)。
3.2型文法 α → β
上下文無關文法(CFG):在1型文法的基礎上,∀α → β∈P,α ∈ ,產生式的通常形式:A→β
上下文無關語言(2型語言):由上下文無關文法(2型文法)G生成的語言L(G)。
4.3型文法 α → β
正則文法(RG):右線性(Right Linear)文法: A→wB 或 A→w
左線性(Left Linear) 文法: A→Bw 或 A→w
正則語言(3型語言):由正則文法(3型文法)G生成的語言L(G),正則文法能描述程序設計語言的多數單詞。
5.四種文法之間的關係
逐級限制:
逐級包含
4、CFG(上下文無關文法)的分析樹
1.CFG分析樹
根節點的標號爲文法開始符號 ;
內部結點表示對一個產生式A→β的應用,該結點的標號是此產生式左部A 。該結點的子結點的標號從左到右構成了產生式的右部β;
葉結點的標號既能夠是非終結符,也能夠是終結符。從左到右排列葉節點獲得的符號串稱爲是這棵樹的產出( yield )或邊緣(f rontier) 。
2.分析樹是推導的圖形化表示
給定一個推導 S => => =>…=> ,對於推導過程當中獲得的每個句型,均可以構造出一個邊緣爲的分析樹
3.(句型的)短語
給定一個句型,其分析樹中的每一棵子樹的邊緣稱爲該句型的一個短語(phrase) ,若是子樹只有父子兩代結點,那麼這棵子樹的邊緣稱爲該句型的一個直接短語(immediate phrase)
4.二義性文法
若是一個文法能夠爲某個句子生成多棵分析樹,則稱這個文法是二義性的。
二義性文法的斷定:對於任意一個上下文無關文法,不存在一個算法,斷定它是無二義性的;可是能給出一組充分條件,知足這組充分條件的文法是無二義性的,知足確定是無二義性,不知足也未必就有二義性。