文法的形式定義
1.處理文法的語法分析器大體上可以分爲三種類型:通用的,自頂向下的和自頂向上的。
2.文法:一種用於描述程序設計語言語法的表示方法——“上下文無關文法”,簡稱“文法”。
3.一個上下文無關文法(文法)有四個元素組成:
文法G可以抽象成四元組的形式:G=(VN,VT,P,S)
其中VN表示非終結符集,VT表示終結符集,P表示產生式集,S表示開始符號。
(1)一個終結符號集合,也稱爲詞法單元。是組成串的基本符號。
(2)一個非終結符號集合,也稱爲語法變量。是表示串的集合的語法變量。
(3)一個開始符號。這個符號表示的串集合就是這個方法生成的語言。
(4)一個產生式集合。描述了將終結符號和非終結符號組合成串的方法。有三個元素組成:
①一個被稱爲產生式頭或左部的非終結符號這個產生式定義了這個頭所代表的串集合的一部分。
②符號→。
③一個由零個或多個終結符號或非終結符號組成的右部或產生式體。右部中的成分描述了左部的非終結符號所對應的串的某種構造方法。
4.文法G描述的語言用L(G)表示L(G)={w|w∈VT*且S=*>w}
其中S是文法G的開始符號,我們可以說w是G的一個句型。因此一個終結符號串w在G生成的語言L(G)中,當且僅當w是G的一個句子。可以由文法生成的語言被稱爲上下文無關語言。
(1)句型:一個句型可能既包含終結符號又包含非終結符號,也可能是空串。
(2)句子:是一個不包含非終結符號的句型。
(3)語言:一個文法生成的語言是它所有句子的集合。
(5)文法等價:如果兩個文法生成相同語言,這兩個文法就被稱爲是等價的。
5.(1)最左推導:總是選擇每個句型的最左非終結符號。逆過程爲最右規約。
(2)最右推導:總是選擇每個句型的最右非終結符號,也稱爲規範推導。逆過程爲最左規約。
例:
文法:
S--->AB
A--->a|t
B---->+CD
C--->a
D---->a
最右推導:
S--->AB---->A+CD--->A+Ca---->A+aa----->a+aa
最左推導:
S---->AB----->aB--->a+CD--->a+aD----->a+aa
6.上下文無關文法及其語法樹:
7.文法的二義性:如果一個文法可以爲某個句子生成多棵語法分析樹,那麼它就是二義性的。換句話說,二義性文法就是對同一個句子有多個最左推導或多個最右推導的文法。
8.文法的分類:
(1)0型文法:無限制文法、短語文法,α->β,α中至少含一個非終結符。
(2)1型文法(CSG):上下文有關文法,α->β滿足|α|<=|β|,對於產生式α1Aα2->α1βα2,用β替換A時,只能在上下文爲α1和α2時才能進行。這裏的|β|表示的是β的長度。同理|α|表示的是α的長度。
注意:雖然要求|β|>=|α|,但有一特例:α→ε也滿足1型文法。
(3)2型文法(CFG):上下文無關文法,A->β,其中左邊必須有且僅有一個非終結符,當用β替換A時,與A的上下文環境無關。
如Ab->Bab雖然符合1型文法要求,但不符合2型文法要求,因爲其α=Ab,而Ab不是一個非終結符。
(4)3型文法(RG):也稱爲正則文法。它應該滿足以下條件①左邊必須只有一個字符,且必須是非終結符。②右邊最多只能有兩個字符,且當只有兩個字符時必須是一個爲終結符而另一個爲非終極符;當右邊只有一個字符時,此字符必須爲終結符。③對於3型文法中的所有產生式,其右邊有兩個字符的產生式,這些產生式右邊兩個字符中終結符和非終結符的相對位置一定要固定,也就是說如果一個產生式右邊的兩個字符的排列是:終結符+非終結符,那麼所有產生式右邊只要有兩個字符的,都必須前面是終結符而後面是非終結符。反之亦然,要麼,就全是:非終結符+終結符。
可以理解爲每個產生式形爲A->aB或A->a。它是在2型文法的基礎上滿足:A→α|αB(右線性)或A→α|Bα(左線性)。
它們分別被四種自動機識別:
(1)圖靈機
(2)線性界線自動機
(3)下推自動機
(4)有窮自動機