《形式語言概述》PPT課件.ppt
《《形式語言概述》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《形式語言概述》PPT課件.ppt(81頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第二章形式語言概述,本章學(xué)習(xí)目標,形式語言由Chomsky于1956年提出,主要討論語言和文法的數(shù)學(xué)機制以及語言和文法的分類。形式語言 的形成和發(fā)展,對編譯原理和技術(shù)產(chǎn)生了重要的影響。本章主要內(nèi)容是: 文法和語言的形式定義 文法的分類 句型的分析和語法樹,字母表,字母表 是元素的非空有窮集合,字母表中的元素稱為符號,因此字母表也稱為符號表。高級語言如C語言的字母表是由字母、數(shù)字、特殊符號和一些專用符號構(gòu)成。 字母表可以用表示 例:=a,b, =0,1, =0,1,2,3,4,5,6,7,8,9, =a,b,c,z,if,then,else,main,1,2,3,4,,9,0,=,==,,<,;
2、(,),2.1.2 符號串,(1)符號 語言中最基本的不可再分的單位 (2)符號串 符號串是由字母表中的符號所組成的有窮序列。符號串由小寫x,y,z表示 例 :某個字母表=a,b,c,z,if,then,else,main,1,2,3,4,,9,0,=,==,,<,;,則建立在上的符號串有:if (2+3==5) then a=6 else b=8; 空串是不含任何符號的串,記作 (3)符號串的長度 符號串x中所包含的符號的個數(shù)稱為符號串x的長度,記為|x| 。 例:字母表0,1,則|010110|=6??沾拈L度為0。,(4)子字符串 設(shè)有非空符號串u=xvy,其中x、v、y是符號串,且v,
3、則稱v為符號串u的子符號串。 例:設(shè)字母表=a,b,c,d,+,-,*,/,(,)上有符號串x=a+b*(c+d),則a、a+b*與(c+d)等都是x的子符號串,且其長度分別為a=1、a+b*=4與(c+d)=5 (5)符號串的頭和尾 如果z=xy是一個符號串,則x是z的頭,而y是z的尾。如果y非空,則x是z的固有頭,又稱為真前綴;若x非空,則y是z的固有尾,又稱為真后綴。 例 假設(shè)字母表=a,b,c上的符號串z=abc,則、a、ab、abc都是z的頭,且除abc外都是z的固有頭;、c、bc、abc都是z 的尾,且除abc外都是z的固有尾。,若只對符號串的頭部感興趣,記做z=x。若只對尾部感興
4、趣,則記為z=x。,符號串的運算,連接(乘積)運算 設(shè) x與y是同一個字母表上的兩個符號串,把y的各個符號相繼寫在x的符號后所得到的符號串稱為x與y的連接,記為xy。 例:設(shè)在字母表a,b,c上有符號串 x=ab與y=cba,則z=xy=abcba。這里x=2, y=3, z=5。 對于字母表上的任何符號串x,都有x=x=x 注:xy!=yx 符號串的方冪 設(shè)x是某個字母表上的符號串,把x自身連接n次,即z=xxx(n個x),稱為符號串x的n次方冪,記為z=xn。 例: x=ab x3=ababab,2.1.3 符號串集合,符號串集合 集合A中一切元素都是某字母表上的符號串,則稱A是該字母
5、表上的符號串的集合。 字母表上的符號串的集合通常用大寫字母來A、B、C、表示。 例: 設(shè)某個字母表a,b,c,d, 符號串集合A,B A=a,bc, B=abc,cd,ab,乘積 兩個符號串集合A和B的乘積AB定義為AB=xyxA ,且yB 例: 設(shè)A=a,b,B=c,d,e 則AB=ac,ad,ae,bc,bd,be 對于任何空集合,都有A=A=A 方冪 類似于符號串的方冪,可以定義符號串集合的方冪,特別地定義字母表A的方冪為: A0=,A1=A,An=An-1A (n0),符號串集合的運算,字母表的閉包與正閉包的運算 閉包 設(shè)有字母表A,A的閉包定義如下: A*=A0A1 A2 An
6、,其中,An (n=0,1,2,3,)中所有的符號串的長度為n,因此字母表A的閉包 A*為字母表上一切長度為n的符號串所組成的集合。 注:閉包可以看作由A上符號組成的所有串的集合(包括空串) 正閉包 如果不允許包含空串,則得到字母表A的正閉包。 A的正閉包 A+=A1 A2 An 注:正閉包可以看作由A上符號組成的所有串的集合(不包括空串) 語言 字母表上按照某種規(guī)則形成的某個符號串的集合,所以,語言是該字母表上正閉包的子集,例:設(shè)字母表=a,b,c,依次寫出長度為1、2、3的符號串,可得到 的正閉包 + :+=a,b,c,aa,ab,ac,bb,bc,aaa,aab,aac,abb,abc,
7、baa, 在+上添入空串即得*。,2.2 文法的定義及其分類,什么是文法? 描述語言的語法結(jié)構(gòu)的形式規(guī)則,嚴格地定義句子的結(jié)構(gòu),用適當(dāng)條數(shù)的規(guī)則把語言的全部句子描述出來,是以有窮的集合刻劃無窮的集合的工具。, ::= ::= | ::= 我|你|他 ::= ::= 是|學(xué)習(xí) ::= |,我是大學(xué)生的推導(dǎo)過程: = = = 我 =我 =我是 =我是 =我是大學(xué)生,2.2.2 文法的形式定義(1),非終結(jié)符 出現(xiàn)在規(guī)則的左部,用括起來,表示一定語法概念的詞, 用VN表示 終結(jié)符 語言中不可再分割的字符串(包括單個字符組成的串) 用VT表示 V= VN U VT 開始
8、符號 表示所定義的語法范疇的非終結(jié)符又稱為識別符號 開始符號用S表示,2.2.2 文法的形式定義(2),重寫規(guī)則 也叫產(chǎn)生式規(guī)則,或稱為生成式,是形如或::=的(,)有序?qū)?其中, 是某個字母表V+中的一個元素,是V* 中的一個元素。稱為規(guī)則的左部,稱為規(guī)則的右部。 例: AB讀作“A定義為B”,也就是說它是一條關(guān)于A的規(guī)則(產(chǎn)生式)。 文法 文法G是一個四元組,G=(VN,VT,P,S),其中,VN、VT分別是非空有限的非終結(jié)符號集和終結(jié)符號集,VNVT=,P是產(chǎn)生式的集合,SVN 為文法的識別符號或開始符號。,例: 在程序設(shè)計語言中,假設(shè)我們定義標識符的命名規(guī)則為字母a、b、c開頭的,字母
9、a、b、c和數(shù)字1、2、3的序列。命名規(guī)則為: a b c 1 2 3,我們一般用大寫字母代表左邊的非終結(jié)符,設(shè)N 代表,D代表,L代表,則定義標識符的文法是: G=(VN,VT,P,S)其中,VN=N,L,D ,VT=a,b,c,1,2,3 P為產(chǎn)生式的規(guī)則: NL, NNL ,NND ,La ,Lb ,Lc ,D1 ,D2,D3 S 是開始符號, 為N 注:產(chǎn)生式的規(guī)則說明一點,即若A,A,A可寫成A|| ?!皘” 讀做 “或者”。 上面的產(chǎn)生式規(guī)則可以改寫為: NL|NL|ND La|b| c D1|2|3,2.2.3 文法的分類,喬姆斯基(Chomsky)于1956年建立形式語言的
10、描述以來,把文法分成四種類型,即0型、1型、2型和3型文法。 0型文法(短語文法) 設(shè)G=(VN,VT,P,S),如果它的每個產(chǎn)生式是這樣一種結(jié)構(gòu):(VNVT )+ ,且至少含有一個非終結(jié)符,而(VNVT )*,則稱G是一個0型文法。0型文法又稱短語文法,它的能力相當(dāng)于一個圖靈機。 例如,A 圖靈機是識別0型文法的識別裝置 0型文法是對產(chǎn)生式限制最少的文法; 對0型文法產(chǎn)生式的形式作某些限制,可得到其他類型文法的定義。,1型文法(上下文有關(guān)文法) 設(shè)G=(VN,VT,P,S)為一文法,若P中的每一個產(chǎn)生式均滿足,僅僅S除外,則文法G是1型文法或上下文有關(guān)文法。 所謂上下文有關(guān)文法即:=1A2,
11、=1B2,符號串1 和2可以認為是上下文,A只有出現(xiàn)在上下文之間中,才可以被符號串B替代,成為=1A2=1B2因此,1型文法又稱為上下文有關(guān)文法。 能夠識別上下文無關(guān)語言的自動機稱為線性界限自動機。縮寫為LBA 注:1型文法意味著,對非終結(jié)符進行替換時務(wù)必考慮上下文,并且,一般不允許替換成 ,除非是開始符號產(chǎn)生,2型文法(上下文無關(guān)文法) 設(shè)G=(VN,VT,P,S),若P中的每個產(chǎn)生式滿足: 是一個非終結(jié)符, (VNVT ) *,則此文法稱為2 型文法或上下文無關(guān)文法。有時將2型文法的產(chǎn)生式表示為形如:A,其中AVN 。 也就是當(dāng)用取代非終結(jié)符A時,與A所在的上下文無關(guān)。上下文無關(guān)文法有足夠
12、的能力描述現(xiàn)今的程序設(shè)計語言。 識別上下文無關(guān)語言的自動機稱為下推自動機。它是??s寫為PDA。 例: 2 型文法 G=(VN,VT,P,N) 其中,VN=N,D VT=0,1,2,3,4,5,6,7,8,9 P=NNDD,D0123456789 注:該文法描述的符號串的集合是整數(shù)。,3型文法(右線性文法或正規(guī)文法) 對2型文法的產(chǎn)生式做進一步的限制,限制產(chǎn)生式右部是單一終結(jié)符或單一終結(jié)符跟著單一非終結(jié)符,即:Aa ,AaB 則稱該文法為3型文法,又稱為右線性文法或正規(guī)文法,其中A、BVN,aVT. 識別3型語言或正則語言的自動機稱為有窮自動機??s寫為FA。 例: 3型文法 G=(VN,VT,P
13、,S) 其中,VN=S,A,B VT=0,1 P=S011A0B,A1A0B,B010B 注:該文法產(chǎn)生的是二進制整數(shù)。,2.2.4 文法舉例,例:1型文法 G=(VN,VT,P,A) VN=S,X,Y,Z VT=x,y,z P= S xSYZxYZ xYxy yYyy yZ yz ZY YZ zZ zz ,例:2型文法 G=(VN,VT,P,E) VN=E,T,F(xiàn), VT=+,*,(,),i P= EE+T|T, TT*F|T, F(E)|i 注:該文法能推出具有乘和加運算的算術(shù)表達式。,例:正規(guī)文法 G=(VN,VT,P,S)其中VN=S,A,B,G,H, VT=d,,+, P= SdB
14、 | +A | A | .G AdB | .G BdB | .H |d GdH HdH | d 其中,d代表十進制數(shù)字。 根據(jù)以上我們對文法的定義我們不難發(fā)現(xiàn)3型文法類是2型文法類的特殊情況,2型文法類是1型文法類的特殊情況。每一類文法都是在前一類文法的基礎(chǔ)上加上一些限定規(guī)則而產(chǎn)生的。因此,四類文法產(chǎn)生的語言就會有如下關(guān)系: 3型語言2型語言1型語言0型語言,2.2.6 文法分類的意義,一個文法實際上是某種語言的一個簡明、確切的描述,它表示了該語言中所允許的一類語法結(jié)構(gòu)。從一個文法能推導(dǎo)出多個終結(jié)符的句子。但是知道了如何去構(gòu)造屬于某一個語言的一個合法串只是問題的一個方面。同時我們還要有
15、能力判定一個串是否合法。也就是說,我們需要確定這個給定串的推導(dǎo)序列。如果從文法出發(fā)找不到這個推導(dǎo)序列,則該串就是非法的。 程序設(shè)計語言的詞法分析屬于正規(guī)文法,與局部語法相關(guān)的部分屬于上下文無關(guān)文法,與全局語法和語義有關(guān)的部分屬于上下文有關(guān)文法。,2.3 文法產(chǎn)生的語言和句型的語法樹,推導(dǎo) 推導(dǎo)是從開始符號開始,通過使用產(chǎn)生式的右部取代左部,最終能產(chǎn)生語言的一個句子的過程。 最左(右)推導(dǎo):每次使用一個規(guī)則,以其右部取代符號串的最左(右)非終結(jié)符。 注:最左推導(dǎo)和最右推導(dǎo)稱為規(guī)范推導(dǎo): 歸約 歸約是推導(dǎo)的逆過程,即,從給定的源語言的句子開始,通過規(guī)則的左部取代右部,最終達到開始符號的過程。 最左
16、(右)歸約是最右(左)推導(dǎo)的逆過程。 注:最左歸約和最右歸約稱為規(guī)范歸約。,文法產(chǎn)生的語言和句型的語法樹(續(xù)),推導(dǎo)和規(guī)范推導(dǎo) 推導(dǎo)分為三大類:直接推導(dǎo)、,長度為n(n1)的推導(dǎo)+和長度為n( n0)的推導(dǎo) *。 直接推導(dǎo) 如是文法G=(VN,VT,P,S)的規(guī)則(或說是P中的一產(chǎn)生式),,(VNVT)*,則稱符號串為符號串應(yīng)用產(chǎn)生式所得到的直接推導(dǎo)。記為。,推導(dǎo)長度大于0的推導(dǎo) 如果對于符號串v 與w存在一個直接推導(dǎo)序列 u0 u1u2u3un (n0) 其中u0=v與un =w,則稱符號串v推導(dǎo)出w或稱w歸約到v,記作v +w,稱這個直接推導(dǎo)序列是長度為n的推導(dǎo)。 推導(dǎo)長度大于等于0的推
17、導(dǎo) 如果對于符號串v和w,v=w或v=w,則記作v *w,稱符號串v廣義推導(dǎo)到符號串w,或稱w廣義歸約到v。,例: 根據(jù)文法,考慮以C語言中的無正負號整數(shù)作為識別符號的文法。 | 0|1|2|3|4|5|6|7|8|9 VT =0,1,2,3,4,5,6,7,8,9 VN = , , 判斷數(shù)據(jù)2634是否是C語言合法的數(shù)據(jù)? 給出數(shù)據(jù)2634的推導(dǎo)。 4 43434 6342634 由此可見,2634是C 語言的合法數(shù)據(jù)。每一步推導(dǎo)都是直接推導(dǎo)??梢员硎緸?2634,最左推導(dǎo) 如果在推導(dǎo)的任何一步,其中、是句型,都是對中的最左非終結(jié)符進行替換,則稱這種推導(dǎo)為最左推導(dǎo)。 最右推導(dǎo) 如
18、果在推導(dǎo)的任何一步,其中、是句型,都是對中的最右非終結(jié)符進行替換,則稱這種推導(dǎo)為最右推導(dǎo)。 規(guī)范推導(dǎo) 在形式語言中,最右推導(dǎo)常稱為規(guī)范推導(dǎo),由規(guī)范推導(dǎo)所得的句型稱為規(guī)范句型。,例: 給出了下列文法G: | 0|1|2|3|4|5|6|7|8|9 VT =0,1,2,3,4,5,6,7,8,9 VN = , , 判斷數(shù)據(jù)2634是否是C語言合法的數(shù)據(jù)? (1)用最右推導(dǎo),每次用產(chǎn)生式的規(guī)則替換最右邊的非終結(jié)符,推導(dǎo)過程如下: 4434346342634,(2)用最左推導(dǎo),每次直接推導(dǎo)都替換最左邊的非終結(jié)符,推導(dǎo)過程如下: 2 26 263 2634,2.3.2 句型、句子和語言,句型 設(shè)G
19、S是一個文法,如果符號串x是從開始符號S推導(dǎo)得到的,即有S=*x,xV+,則稱符號串x是該文法G的一個句型。 句子 GS是一個文法,如果符號串x是從開始符號S推導(dǎo)得到的,即有S=+x,并且xVT,則稱該符號串為該文法的一個句子。 注:實質(zhì)上,句子是句型的特殊情況,句子是由終結(jié)符組成,而句型是有終結(jié)符和非終結(jié)符組成。 語言: GS是一個文法,文法G產(chǎn)生的語言L(G)=x|S=*x,并且xVT,即文法的語言是文法所有句子的集合。,句型、句子和語言(續(xù)),文法規(guī)則的遞歸定義 非終結(jié)符的定義中包含了非終結(jié)符自身。 注:使用文法的遞歸定義要謹慎,要有遞歸出口,否則,可能永遠產(chǎn)生不出句子。,例:字母表A=
20、0,1 文法: | 0|1 再如:字母表A=0,1 0|1,,,2.3.3 語法樹,在自然語言中,句子結(jié)構(gòu)可以借助一種樹形表示進行分析。如下面的句子: They are students and teachers of the Physics Department。 對該句子的結(jié)構(gòu)進行分析,其樹型結(jié)構(gòu)如圖2-3所示,由此可以看出,該句子是由主語、系詞和表語組成,是一個語法正確的句子。,在自然語言中,可以通過樹型表示直觀地分析句子的結(jié)構(gòu);在形式語言中,我們提到了句型、推導(dǎo)的概念,在證明某個符號串是否是某個文法的句型時,采用從文法開始符號推導(dǎo)的方法,這個推導(dǎo)過程可以用語法樹直觀的表示出
21、來。語法樹也稱為推導(dǎo)樹,其定義如下:,給定文法G=(VN,VT,P,S) ,對于G的任何句型都能構(gòu)造與之關(guān)聯(lián)的語法樹,這棵樹滿足下列四個條件: (1)每個結(jié)點都有一個標記,此標記是V的一個符號。 (2)根的標記是S。 (3)若一結(jié)點n至少有一個它自己除外的子孫,并且有 標記A,則A肯定在VN中。 (4)如果結(jié)點n的直接子孫,從左到右的次序是結(jié)點n1,n2,n3.nk,其標記分別為A1,A2,A3,AK。那么AA1A2A3AK一定是P中的一個產(chǎn)生式。,例: 設(shè)文法GS : EE+T|T TT*F|F F(E)|i 證明符號串E+(E+T)*i是文法的句型?,2.3.4 二義性文法及其他,二義性文
22、法 一個文法,如果它的一個句子或句型有兩棵或兩棵以上的語法樹,則稱此句子具有二義性。如果一個文法含有二義性的句子,則稱該文法具有二義性。 例: 設(shè)文法GS: Sif B then S|if B then S else S|i:=E 給出符號串if B then if B then S else S的語法樹。 語法樹的結(jié)構(gòu)如圖2-5所示。 從上面的語法圖我們可以看出,字符串if B then if B then S else S能夠畫出兩棵語法樹,所以該文法是一個二義性文法。,在語言中,為了避免二義性的文法,往往對文法加以一定的限制, 限制條件語句then之后不允許再是條件語句 從語義解釋方面限
23、制條件語句中的else只能與其前面的、還沒有和其他else配對的then配對。,Sif B then S|if B then S else S|i:=E 符號串if B then if B then S else S,2二義性文法的證明,要判定一個文法是否是二義性文法,或它是否產(chǎn)生一個先天二義性的上下文無關(guān)語言,是個遞歸不可解的。即不存在一個算法,它能在有限的步驟內(nèi),確切的判斷出某個給定的文法是否是一個二義性文法。 我們要證明一個文法是否是一個二義性文法,就是找到該文法的一個句型特例,能夠畫出這個句型的兩棵語法樹,該文法就是二義性文法。,例2.25 文法G=(E,+,*,I,(,),P,E)其
24、中P為: Ei EE+E EE*E E(E) 證明該文法是二義性文法,并將該文法改為等價的非二義性文法(等價的文法是指產(chǎn)生的語言相等的文法)?,【證明】取句型i*i+i,寫出該句型的兩個不同的推導(dǎo)。畫出推導(dǎo)的兩棵不同的語法樹。 推導(dǎo)1:EE+EE*E+Ei*E+Ei*i+Ei*i+i 推導(dǎo)2:EE*Ei*Ei*E+Ei*i+Ei*i+i 推導(dǎo)的兩棵語法樹如圖2-6所示。 將文法改為非二義性文法為: ET |E+T TF |T*F F(E)|i,2.3.5 文法產(chǎn)生的語言,例2.26 設(shè)G=(VN,VT,P,S),VN=S,B,E,VT=a,b,c,P由下列產(chǎn)生式組成: SaSBE SaBE E
25、BBE aBab bBbb bEbe eEee (1)問該文法是Chomsky哪一類型的文法? (2)它生成的語言是什么?,(1)答根據(jù)文法分類定義,由于文法中存在產(chǎn)生式,其左部由長度大于1的符號串構(gòu)成,如產(chǎn)生式“EBBE”,顯然不符合Chomsky 的2型和3型文法的定義。該文法產(chǎn)生式左部串的長度均小于等于右部串的長度,符合1型文法的定義,所以該文法是上下文有關(guān)文法。,(2)根據(jù)如下推導(dǎo):對于每一個n1,我們將號產(chǎn)生式使用n-1次,得到推導(dǎo)序列:S an-1S(BE)n-1,然后使用產(chǎn)生式(2)一次,得到:S an(BE)n,然后從an(BE)n.繼續(xù)推導(dǎo),總是對EB使用產(chǎn)生式的右部進行替換
26、,而最終在得到的串中,所有的B都限于所有的E。設(shè)n=3,aaBEBEBEaaaBBEEBEaaaBBEBEEaaaBBBEEE。即有:S anBnEn.接著,使用產(chǎn)生式(4)一次,得到SanbBn-1En,然后使用產(chǎn)生式n-1 次得到:S anbnEn,然后使用產(chǎn)生式一次,使用產(chǎn)生式n-1次,得到:S anbnen 因此該文法產(chǎn)生的語言是L(G)=anbnen|n1。,例 :設(shè)有上下文無關(guān)文法如下: GS: SAB AUT Ua|aU Tb|bT Bc|cC 將文法的產(chǎn)生式代入產(chǎn)生如下文法: GS: SUTB Ua| aU Tb|bT Bc|cC,考察文法,用L(S),L(U),L(T)和L(
27、B)分別表示從終結(jié)符S,U,T和B出發(fā)推導(dǎo)出的符號串的集合,不難發(fā)現(xiàn): L(U)=ai|i1=a+ L(T)=bj|j1=a+ L(B)=ck|k1=a+ 由于有SUTB,則有: L(S)=L(U)L(T)L(B) =(aibjck|i1,j1, k1) =a+b+c+,語言產(chǎn)生文法 (1),例:設(shè)L1=a2nbn|n=1 且a,b VT試構(gòu)造生成L1的文法G1 設(shè) n=1, L1 =aab n=2, L1 =aaaabb n=3, L1 =aaaaaabbb 所以得:S aaSb S aab,例:構(gòu)造一個上下文無關(guān)文法G,使其描述的語言L(G)是能夠被5整除的無符號整數(shù)集合。 能夠被
28、5整除的整數(shù)其結(jié)構(gòu)特點是,末位數(shù)一定是0或5。所以,只要保證生成的整數(shù)末位數(shù)字是0或5即可。據(jù)此,構(gòu)造描述能被5整除的無符號整數(shù)集合的文法如下: GS: SN0|N5 NDN| D0|1|2|3|4|5|6|7|8|9,語言產(chǎn)生文法 (3),例: 寫出一個上下文無關(guān)文法G,使得L(G)=anbmcmdn|n0,m1 分析該語言的特點,可以看出,a和d的個數(shù)是一樣的,b和c的個數(shù)是一樣的。m的取值范圍從1開始,所以至少有一個bc,n的最小值為0。寫出文法為: SaSd|A AbAc|bc,2.4 句型分析與句柄,對于上下文無關(guān)文法,語法樹是句型推導(dǎo)過程的幾何表示;是進行句型分析極好的工具。所謂句
29、型分析就是識別一個符號串是否是某一個文法的句型。進一步說就是給定一個符號串時,按照某文法的規(guī)則為該符號串構(gòu)造推導(dǎo)或語法樹,以此來識別它是文法的一個句型。對于上下文無關(guān)文法,其句型分析方法有兩大類,一類是自上而下的分析方法(又稱自頂向下),另一類是自下而上(自底向上)的分析方法。,2.4.1 自上向下的分析方法,基本思想 自上而下的分析方法就是從識別符號出發(fā),看是否能推導(dǎo)出待檢查的符號串,如果能推導(dǎo)出這個符號串,則表明此符號串是該文法的句型或句子,否則就不是。 或者說,以文法的識別符號作為根結(jié)點,看是否能構(gòu)造出一個語法樹,而且此語法樹所有葉子結(jié)點從左到右所構(gòu)成的符號串恰好是待檢查的符號串。如果能
30、生成這樣的語法樹,則表明待檢查的符號串是該文法的一個句型或句子,否則就不是。,例 設(shè)文法GS: SaAbc| aB Aba BbeB|d 輸入串:abed,識別該串是否是該文法的一個句子? 方法:從文法的識別符號S開始出發(fā),選擇它的一個產(chǎn)生式SaAbc 得到直接推導(dǎo) S aAbc以識別符S作為根結(jié)點,構(gòu)造語法樹,如下圖2-7所示,SaAbc| aB Aba BbeB|d,,abed??,2分析過程,符號串a(chǎn)Abc與待檢查的符號串a(chǎn)bed的第一個符號相匹配。由于符號串a(chǎn)Abc的第2個符號是非終結(jié)符,因此需要對它進行替換。A只有一個產(chǎn)生式Aba。以其右部替換A,得推導(dǎo)SaAbcababc得到語法樹
31、,如圖2-7(b)所示。 符號串a(chǎn)babc與待查符號串a(chǎn)bed的第2個符號相匹配,但與第3個符號不相匹配,匹配失敗。此時,需要退回到非終結(jié)符 A,重新選擇S另外的產(chǎn)生式,再做試探。這種選擇的過程稱之為回溯。,選擇S的另外一條產(chǎn)生式的規(guī)則SaB,得到直接推導(dǎo)SaB,得到語法樹2-7(c),再選取其中的一條產(chǎn)生式BbeB,得到推導(dǎo)SaBabeB,得到語法樹如圖(d),將Bd代入即可得到該字符串a(chǎn)bed。,3存在問題,自上而下分析方法是從文法的識別符號開始,選擇相應(yīng)的產(chǎn)生式規(guī)則進行推導(dǎo)。但在推導(dǎo)過程中會出現(xiàn)回溯現(xiàn)象。我們把出現(xiàn)回溯的分析稱為不確定的自頂上下分析方法。這種方法花費時間多,效率低,編程實
32、現(xiàn)時復(fù)雜,如果對文法加以限制,就可以避免回溯,這就出現(xiàn)了我們后面要提到的LL(1)分析方法,2.4.2 確定的自上而下的分析方法,例: 設(shè)文法GS SaBc|bCd BeB|f CdC|c 試檢查符號串a(chǎn)efc是不是該文法的句子?,識別符S有兩條產(chǎn)生式,它們的右部首符號分別是終結(jié)符a和b。待檢查符號串a(chǎn)efc的首符號是a,所以從識別符S出發(fā),只能選擇其產(chǎn)生式SaBc得到直接推導(dǎo)SaBc得到語法樹如圖2-8(a)所示。其中,非終結(jié)符B有兩條產(chǎn)生式,它們右部首符號分別是終結(jié)符e與f,而待檢查的符號串a(chǎn)efc的第2個符號是終結(jié)符e,所以選擇B的產(chǎn)生式BeB 得到推導(dǎo)SaBcaeBc,得到語法樹如圖2
33、-8(b)所示。,由于待檢查的符號串a(chǎn)efc的第3個符號是終結(jié)符f,因而對句型aeBc中的非終結(jié)符B選擇其產(chǎn)生式Bf的推導(dǎo)SaBcaeBcaefc得到語法樹如圖2-8(c)所示。 如此推導(dǎo)出的符號串a(chǎn)efc,語法樹的葉子結(jié)點序列是aefc,與待檢查的符號串a(chǎn)efc相匹配。,SaBc|bCd BeB|f CdC|c,aefc?,例: 若有文法GS SAp|Bq Aa AcA Bb BdB 當(dāng)輸入串W=ccap,那么試圖推出輸入串的推導(dǎo)過程為: SApcApccApccap 很容易構(gòu)造相應(yīng)語法樹,如圖2-9所示。,2.4.3 自下而上的分析方法,基本思想 自下而上的分析方法的基本思想是從待檢查的符
34、號串出發(fā),看最終是否能歸約到文法的識別符號。如果能歸約到文法的開始的識別符號,則表明此待檢查的符號串是該文法的一個句型或句子,否則便不是。,例2.33 若有文法GS ScAd Aab Aa 識別輸入串w=cabd是否是該文法的句子。 首先從輸入串開始,掃描cabd,從中尋找一個子串,該子串與某一產(chǎn)生式的右端相匹配。子串a(chǎn)和子串a(chǎn)b都是合格的,假若我們選用了ab,用產(chǎn)生式的左端A去替代它,即把ab歸約到A,得到串cAd。 構(gòu)造一個直接推導(dǎo)cAdcabd,即從cabd葉子開始向上構(gòu)造語法樹,接下去在得到的串cAd中又找到了子串cAd與產(chǎn)生式的右端相匹配,則用S替代cAd,或稱將cAd歸約到S,得到
35、了又一直接推導(dǎo)ScAd,形成了最終的語法樹。分析過程如圖2-10所示。,2存在問題,在自上向下的分析中,假定要被代換的最左非終結(jié)符的符號是V,且有n條規(guī)則:V1|2|3||n,那么如何確定用哪個右部去替換V?有一種解決方法是從各種可能的選擇中挑選一種,并希望它是正確的。如果發(fā)現(xiàn)它是錯誤的,我們必須退回,再試著進行另外的選擇,這種方式稱為回溯。,在自下向上的分析方法中,在分析程序工作的每一步中,都從當(dāng)前串中選擇一個子串,將它歸約到某個非終結(jié)符號,我們暫且把這個子串稱為“可歸約串”。出現(xiàn)的問題是如何確定這個“可歸約串”?比如在上例中,我們在對輸入串cabd 的分析中,如果不是選擇ab,用產(chǎn)生式,而
36、是選擇a,用產(chǎn)生式將a歸約到A,那么最終就達不到S的結(jié)果,也就不知道cabd是一個句子。因此在歸約時,ab是“可歸約串”而不是a。如何求“可歸約串”成為自下而上進行分析的關(guān)鍵。下面我們用“句柄”的概念來描述“可歸約串”。,3句柄的概念,(1)形式化定義 令G是一文法,S是文法的開始符號, 是文法的一個句型。如果有:S=*A且A=+則稱是句型相對于非終結(jié)符A的短語。特別地,如有A則稱是句型相對于規(guī)則A的直接短語。一個句型的最左直接短語稱為該句型的句柄。 (2)求一個句型的句柄 給定某個句型,要求出該句型的句柄,比較直觀的方法就是畫出該句型的語法樹。該語法樹的一棵子樹的葉子結(jié)點(從左到右)組成的符
37、號串便是這個句型關(guān)于子樹根結(jié)點的一個短語。,語法樹的一棵簡單子樹(只有單層子樹)的葉子結(jié)點組成的符號串是這個句型關(guān)于簡單子樹根結(jié)點的一個直接短語。語法樹的最左的簡單子樹葉子結(jié)點組成的符號串就是這個句型的句柄。,例: 已知文法GS: S(R)|a| RT TS,T|S 求句型=(a,(T),(S,T))的短語,直接短語和句柄?,【解答】觀察該語法樹,共有10個非葉子結(jié)點,10棵子樹。 因此有短語 a T (T) S,T (S,T) (T), (S,T) a, (T), (S,T) (a, (T), (S,T)),2.4.4 文法的存儲,一個文法的語法圖由該文法所有非終結(jié)符的定義圖組成。每個非終結(jié)
38、符號的定義圖是一個結(jié)構(gòu)型數(shù)據(jù)。 寫成高級語言的結(jié)構(gòu)型數(shù)據(jù)形式,則為: type struc= boxes boxes=record name:array110 of char; def:struc; nextp:struc; 、 rights:struc; end;,,“名字”是用某種內(nèi)部形式表示的終結(jié)符號或非終結(jié)符號的名字。 “定義”是一個指針,對于非終結(jié)符號,它指向其第一個侯選式結(jié)構(gòu)圖的開始位置。對于終結(jié)符號,它為0 “下一個侯選式”是一個指針,指向相同左部的下一個侯選式的開始位置。若無侯選式,則它為0; “右部后繼”是一個指針,指向同一個右部的下
39、一個符號。 另用一個一維數(shù)組記錄所有的非終結(jié)符號定義圖的開始地址。 也就是說,這個數(shù)組的每個元素都是一個指針,分別指向相應(yīng)的非終結(jié)符號的第一個候選式的定義圖。 例2.35(p31),例2.35文法 EEAT|T TTMF|F F(E)|i A+| M*|/ 按照上面的存儲結(jié)構(gòu),畫出文法的存儲結(jié)構(gòu)如圖2-12所示:,小 結(jié),文法是形式語言的一個十分重要的基本概念。文法可定義為一個四元組,文法G=(VN,VT,P,S),其中,VN是一個非終結(jié)符集,VT是一個終結(jié)符集,P是一個產(chǎn)生式集,S是文法的開始符號。 Chomsky 將文法分為0 型,1型,2型和3型文法。程序設(shè)計語言的詞法規(guī)則屬于3型文法(正規(guī)文法),程序設(shè)計語言的語法和語義部分一般是采用2型文法來描述。,對于一個文法,我們需要研究它的句型,句子和語言。要識別一個符號串是不是一個文法的句子,需要對它進行語法分析。分析方法有兩類,一類是自上而下分析法,另一類是自下而上的分析方法。 為了進行語法分析,需要事先將產(chǎn)生式存儲在計算機中。可以為文法建立一個產(chǎn)生式表,把文法的所有的產(chǎn)生式都放在這個產(chǎn)生式表中。為了在分析過程中能迅速查找到相應(yīng)的產(chǎn)生式,還可以建立一個目錄表。,作業(yè),P36 3,4,5,6,7,10 ftp://219.222.171.9 user: chenqians 無密碼,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓(xùn)考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習(xí)題含答案
- 2煤礦安全監(jiān)測工種技術(shù)比武題庫含解析
- 1 礦山應(yīng)急救援安全知識競賽試題
- 1 礦井泵工考試練習(xí)題含答案
- 2煤礦爆破工考試復(fù)習(xí)題含答案
- 1 各種煤礦安全考試試題含答案