




已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1,編譯原理 文法和語言,華東交通大學(xué) 軟件學(xué)院網(wǎng)絡(luò)工程教研室 萬仲保 Tel:7046821E-mail:,2,第三章 文法和語言,本章目的 為語言的語法描述尋求工具 工具要對(duì)程序設(shè)計(jì)語言給出精確無二義的語法描述。(嚴(yán)謹(jǐn)、簡(jiǎn)潔、易讀) 形式工具-形式語言抽象地定義為一個(gè)數(shù)學(xué)系統(tǒng)?!靶问健笔侵高@樣的事實(shí):語言的所有規(guī)則只以什麼符號(hào)串能出現(xiàn)的方式來陳述。,3,3.1 文法的直觀概念 3.2 符號(hào)和符號(hào)串 3.3 文法和語言的形式定義 3.4 文法的類型 3.5 上下文無關(guān)文法及其語法樹 3.6 句型分析 3.7 實(shí)用說明,第三章 文法和語言,4,文法的直觀概念,一個(gè)程序設(shè)計(jì)語言是一個(gè)記號(hào)系統(tǒng),如同自然語言一樣,它的完整的定義應(yīng)包括語法和語義兩個(gè)方面。所謂一個(gè)語言的語法是指一組規(guī)則,用它可以形成和產(chǎn)生一個(gè)合適的程序。目前廣泛使用的手段是上下文無關(guān)文法,即用上下文無關(guān)文法作為程序設(shè)計(jì)語言語法的描述工具。語法只是定義什么樣的符號(hào)序列是合法的,與這些符號(hào)的含義毫無關(guān)系 闡明語法的一個(gè)工具是文法,這是形式語言理論的基本概念之一。 示例:漢語句子的描述 語言概述,5,漢語句子的描述,語法規(guī)則定義 字符串的判斷,6,語法規(guī)則定義,句子=主語謂語 主語=代詞名詞 代詞=我你他 名詞=王明大學(xué)生工人英語 謂語=動(dòng)詞直接賓語 動(dòng)詞=是學(xué)習(xí) 直接賓語=代詞名詞,7,字符串的判斷,有了一組規(guī)則以后,按照如下方式用它們導(dǎo)出句子:開始去找=左端的帶有句子的規(guī)則并把它由=右端的符號(hào)串代替,這個(gè)動(dòng)作表示成: 句子 主語謂語, 然后在得到的串主語謂語中,選取主語或謂語,再用相應(yīng)規(guī)則的=右端代替之。比如,選取了主語,并采用規(guī)則主語=代詞, 那么得到:主語謂語 代詞謂語, 重復(fù)做下去。 句子:“我是大學(xué)生”的全部動(dòng)作過程是: 句子主語謂語 代詞謂語 我謂語我動(dòng)詞直接賓語 我是直接賓語我是名詞我是大學(xué)生,8,字符串的判斷,“我是大學(xué)生”的構(gòu)成符合上述規(guī)則,而“我大學(xué)生是”不符合上述規(guī)則,我們說它不是句子。這些規(guī)則成為我們判別句子結(jié)構(gòu)合法與否的依據(jù),換句話說,這些規(guī)則看成是一種元語言,用它描述漢語。這里僅僅涉及漢語句子的結(jié)構(gòu)描述。其中一種描述元語言稱為文法。,9,符號(hào)和符號(hào)串,定義: 符號(hào):可以相互區(qū)別的記號(hào)(元素)。 字母表():符號(hào)(元素)的非空有窮集合。 符號(hào)串:由字母表中的符號(hào)組成的任何有窮序列稱為該字母表上的符號(hào)串。 1.空符號(hào)串(沒有符號(hào)的符號(hào)串)是上的符號(hào)串 2.若x是上的符號(hào)串,a是的元素,則xa是上的符號(hào)串 3. y是上的符號(hào)串,當(dāng)且僅當(dāng)它可以由1和2導(dǎo)出。 例如: =a,b ,a,b,aa,ab,aabba都是上的符號(hào)串 符號(hào)串的運(yùn)算,10,符號(hào)串的運(yùn)算,既然將語言定義為一個(gè)集合,那么有關(guān)集合的運(yùn)算也適合語言。即:設(shè)L是(上的)一個(gè)語言,M是(上的)一個(gè)語言,則語言L和M的并,交,差,補(bǔ)是一個(gè)語言。 符號(hào)串的頭、尾、子串 符號(hào)串的長度 符號(hào)串的連接 符號(hào)串的方冪 符號(hào)串的集合,11,符號(hào)串的頭、尾、子串,符號(hào)串s的頭(前綴):移走符號(hào)串s尾部的零個(gè)或多于零個(gè)符號(hào)得到的符號(hào)串。 如: b是符號(hào)串banana的一個(gè)前綴. 符號(hào)串s的尾(后綴):刪去符號(hào)串s頭部的零個(gè)或多于零個(gè)符號(hào)得到的符號(hào)串。 如:nana是符號(hào)串banana的一個(gè)后綴. 符號(hào)串s的子串:從s中刪去一個(gè)前綴和一個(gè)后綴得到的符號(hào)串。 如:ana是符號(hào)串banana的一個(gè)子串. 對(duì)于每個(gè)符號(hào)串s, s和兩者都是符號(hào)串s的前綴,后綴和子串。 符號(hào)串s的真前綴,真后綴,真子串:任何非空符號(hào)串 x,相應(yīng)地,是s的前綴,后綴或子串,并且 s x。,12,符號(hào)串中符號(hào)的個(gè)數(shù)。 符號(hào)串s的長度記為|s|。 的長度為0,符號(hào)串的長度,13,符號(hào)串的連接,設(shè)x、y是符號(hào)串,則x、y的連接是把y的符號(hào)寫在x的符號(hào)之后得到的符號(hào)串xy 如 x=ab,y=cd 則 xy=abcd 有a = a,14,符號(hào)串的方冪,方冪:設(shè)x是符號(hào)串,把x自身連接n次得到的符號(hào)串z,即z=aaaa稱為符號(hào)串x的方冪。寫作z=an 示例: a1=a, a2=aa a0=,15,符號(hào)串集合,若集合A中所有元素都是某字母表上的符號(hào)串,則稱A為字母表上的符號(hào)串集合。 兩個(gè)符號(hào)串集合A和B的乘積定義為: AB =xy|xA且yB 若 集合A=ab,cde B = 0,1,則 AB =ab1,ab0,cde0,cde1 使用 * 表示上的所有有窮長符號(hào)串(包括)組成的集合。*稱為的閉包。 上的除外的所有符號(hào)串組成的集合記為+ 。 +稱為的正閉包。 * = 012n + = 12n * = + + =* = *,16,文法和語言的形式定義,文法和語言的形式定義 文法的定義 推導(dǎo)的定義 句型(子)的定義 語言的定義 文法等價(jià)的定義,17,語言概述,語言是由句子組成的集合,是由一組符號(hào)所構(gòu)成的集合。 漢語-所有符合漢語語法的句子的全體 英語-所有符合英語語法的句子的全體 每個(gè)句子構(gòu)成的規(guī)律 語言研究 每個(gè)句子的含義 每個(gè)句子和使用者的關(guān)系 每個(gè)程序構(gòu)成的規(guī)律 研究程序設(shè)計(jì)語言 每個(gè)程序的含義 每個(gè)程序和使用者的關(guān)系 語法 Syntax 語言研究的三個(gè)方面 語義 Semantics 語用 Pragmatics,18,程序設(shè)計(jì)語言,研究程序設(shè)計(jì)語言 每個(gè)程序構(gòu)成的規(guī)律 每個(gè)程序的含義 每個(gè)程序和使用者的關(guān)系 語言研究的三個(gè)方面 語法 Syntax 語義 Semantics 語用 Pragmatics,19,語言研究的三個(gè)方面,語法 - 表示構(gòu)成語言句子的各個(gè)記號(hào)之間的組合規(guī)律 語義 - 表示各個(gè)記號(hào)的特定含義。(各個(gè)記號(hào)和記號(hào)所表示的對(duì)象之間的關(guān)系) 語用 -表示在各個(gè)記號(hào)所出現(xiàn)的行為中,它們的來源、使用和影響。 每種語言具有兩個(gè)可識(shí)別的特性,即語言的形式和該形式相關(guān)聯(lián)的意義。 語言的實(shí)例若在語法上是正確的,其相關(guān)聯(lián)的意義可以從兩個(gè)觀點(diǎn)來看,其一是該句子的創(chuàng)立者所想要表示的意義,另一是接收者所檢驗(yàn)到的意義。這兩個(gè)意義并非總是一樣的,前者稱為語言的語義,后者是其語用意義。幽默、雙關(guān)語和謎語就是利用這兩方面意義間的差異。,20,文法的定義,文法G定義為四元組(VN,VT,P,S )其中VN為非終結(jié)符號(hào)(或語法實(shí)體,或變量)集;VT為終結(jié)符號(hào)集;P為產(chǎn)生式(也稱規(guī)則)的集合;VN,VT和P是非空有窮集。S稱作識(shí)別符號(hào)或開始符號(hào),它是一個(gè)非終結(jié)符,至少要在一條產(chǎn)生式中作為左部出現(xiàn)。 VN和VT不含公共的元素,即VN VT = 通常用V表示VN VT ,稱為文法G的字母表或字匯表。 規(guī)則,也稱重寫規(guī)則、產(chǎn)生式或生成式,是形如或=的(,)有序?qū)Γ渲惺亲帜副鞻的正閉包V+中的一個(gè)符號(hào),是V*中的一個(gè)符號(hào)。稱為規(guī)則的左部,稱作規(guī)則的右部。 示例: 例3.1 例3.2,21,例3.1,文法G=(VN,VT,P,S),VN = S , VT = 0, 1 ,P= S0S1, S01 。這里,非終結(jié)符集中只含一個(gè)元素S;終結(jié)符集由兩個(gè)元素0和1組成;有兩條產(chǎn)生式;開始符號(hào)是S。,22,例3.2,文法G=(VN,VT,P,S) 其中VN=標(biāo)識(shí)符,字母,數(shù)字VT=a,b,c,,x,y,z,0,1,,9 P =標(biāo)識(shí)符字母 標(biāo)識(shí)符標(biāo)識(shí)符字母 標(biāo)識(shí)符標(biāo)識(shí)符數(shù)字 字母a 字母b 字母z 數(shù)字0 數(shù)字1 數(shù)字9 S =標(biāo)識(shí)符 這里,使用尖括號(hào)“和“括起非終結(jié)符。,23,推導(dǎo)的定義,直接推導(dǎo)“”: 如是文法G=(Vn,VT,P,S)的規(guī)則(或說是P中的一產(chǎn)生式), 和是V*中的任意符號(hào),若有符號(hào)串v,w滿足: v= ,w= 則說v(應(yīng)用規(guī)則)直接產(chǎn)生w,或者說,w是v的直接推導(dǎo),也可以說,w直接歸約到v,記作v w。 如果存在直接推導(dǎo)的序列: 示例: 直接推導(dǎo) 多步推導(dǎo),24,直接推導(dǎo)的示例,對(duì)于例3.1的文法G,可以給出直接推導(dǎo)的一些例子如下: v=0S1,w=0011, 直接推導(dǎo):0S10011,使用的規(guī)則:S01,這里 =0,=1。 v=S,w=0S1, 直接推導(dǎo):S0S1使用的規(guī)則:S0S1,這里 =,= v=0S1,w=00S11, 直接推導(dǎo):0S100S11,使用的規(guī)則:S0S1,這里 =0,=1。 對(duì)于例3.2的文法G,直接推導(dǎo)的例子有: v=標(biāo)識(shí)符,w=標(biāo)識(shí)符字母, 直接推導(dǎo):標(biāo)識(shí)符 標(biāo)識(shí)符字母, 使用的規(guī)則:標(biāo)識(shí)符標(biāo)識(shí)符字母,這里 = v=標(biāo)識(shí)符字母數(shù)字,w=字母字母數(shù)字, 直接推導(dǎo):標(biāo)識(shí)符字母數(shù)字 字母字母數(shù)字, 使用的規(guī)則:標(biāo)識(shí)符字母。這里 =, 字母數(shù)字。 v=abc數(shù)字,w=abc5, 直接推導(dǎo):abc數(shù)字 abc5, 使用的規(guī)則:數(shù)字5,這里 =abc,=。,25,多步推導(dǎo)的示例,對(duì)例3.1的文法,存在直接推導(dǎo)序列 v=0S100S11000S11100001111=w, 即0S1 00001111,也可記作0S1 00001111 對(duì)例3.2的文法,存在直接推導(dǎo)序列 v=標(biāo)識(shí)符標(biāo)識(shí)符數(shù)字字母數(shù)字x數(shù)字x1=w, 即 x1,也可記作 x1。,26,句型(子)的定義,設(shè)GS 是一文法,如果符號(hào)串x是從識(shí)別符號(hào)推導(dǎo)出來的,即有S x,則稱x是文法GS的句型。若x僅由終結(jié)符號(hào)組成, 即S x,xVT*,則稱x為GS的句子。 例: S,0S1,000111都是例3.1的文法G的句型,其中000111是G的句子。 標(biāo)識(shí)符字母,字母數(shù)字,a1等都是例3.2文法G的句型,其中a1是G的句子。,27,語言的定義,文法G所產(chǎn)生的語言定義為集合x|S x,其中S為文法識(shí)別符號(hào),且xVT*??捎肔(G)表示該集合。 從定義可以看出兩點(diǎn): 第一,符號(hào)串x可從識(shí)別符號(hào)推出,也即x是句型。 第二,x僅由終結(jié)符號(hào)組成,即x是文法G的句子。也就是說,文法描述的語言是該文法一切句子的集合。 例: 例3.1 G: S0S1, S01 L(G)=0n1n|n1 例3.3,28,例3.3,設(shè)G=(VN,VT,P,S), VN=S,B,E,VT=a,b,e,P由下列產(chǎn)生式組成: (1) SaSBE (2) SaBE (3) EBBE (4) aBab (5) bBbb (6) bEbe (7) eEee 則L(G)= anbnen | n1 ,29,文法的等價(jià),若L(G1)=L(G2),則稱文法G1和G2是等價(jià)的。 示例:文法G1A:A0R A01 RA1與G2S:S0S1 S01等價(jià)。,30,文法的類型,喬姆斯基分類 示例: 例3.4 例3.5 喬姆斯基分類文法之間關(guān)系 對(duì)應(yīng)于喬姆斯基分類文法的語言 文法和語言之間的關(guān)系,31,喬姆斯基對(duì)文法的分類,通過對(duì)產(chǎn)生式施加不同的限制,Chomsky(喬姆斯基)將文法分為四種類型: 0型文法:對(duì)文法G=(VN,VT,P,S)的任一產(chǎn)生式,都有(VNVT)*且至少含有一個(gè)非終結(jié)符,(VNVT)*。 1型文法(上下文有關(guān)文法) :對(duì)文法G=(VN,VT,P,S)的任一產(chǎn)生式,都有|, 僅僅 S除外。 2型文法(上下文無關(guān)文法):對(duì)文法G=(VN,VT,P,S)的任一產(chǎn)生式,都有VN , (VNVT)* 。 3型文法(正規(guī)文法):設(shè)G=(VN,VT,P,S),若P中的每一個(gè)產(chǎn)生式的形式都是AaB或Aa,其中A和B都是非終結(jié)符,a是終結(jié)符。 3型文法G=(VN,VT,P,S)的P中的規(guī)則有兩種形式:一種是前面定義的形式,即:AaB或Aa其中A,BVN ,aVT*,另一種形式是:ABa或Aa,前者稱為右線性文法,后者稱為左線性文法。正規(guī)文法所描述的是VT*上的正規(guī)集。,32,例3.4,G=(S,A,B,a,b,P,S),其中P由下列產(chǎn)生式組成: SaB AbAA SbA Bb Aa BbS AaS BaBB 或?qū)改寫為: SaB|bA AbA|a Aa|AaS BbS|BaB|b 則G是正規(guī)文法或3型文法。,33,例3.5,文法G=(S,A,B,0,1,P,S),其中P由下列產(chǎn)生式組成: S0A A1B S1B B1B S0 B1 A0A B0 A0S 或?qū)改寫為: S0A|1B|0 A0S|1B|0A B1B|1|0 則G是正規(guī)文法或3型文法。,34,喬姆斯基分類文法之間關(guān)系,2型文法,1型文法,0型文法,四種文法之間的逐級(jí)“包含”關(guān)系,3型文法,35,對(duì)應(yīng)喬姆斯基分類文法的語言,0型文法產(chǎn)生的語言稱為0型語言。 1型文法或上下文有關(guān)文法( CSG )產(chǎn)生的語言稱為1型語言或上下文有關(guān)語言(CSL)。 2型文法或上下文無關(guān)文法( CFG )產(chǎn)生的語言稱為2型語言或上下文無關(guān)語言( CF L )。 3型文法或正則(正規(guī))文法( RG )產(chǎn)生的語言稱為3型語言正則(正規(guī))語言( RL )。,36,文法和語言之間的關(guān)系,四種文法之間的關(guān)系是將產(chǎn)生式做進(jìn)一步限制而定義的。 語言之間的關(guān)系依次:有不是上下文有關(guān)語言的0型語言,有不是上下文無關(guān)語言的1型語言,有不是正則語言的上下文無關(guān)語言。,37,上下文無關(guān)文法及其語法樹,語法樹 句型能夠構(gòu)造關(guān)聯(lián)語法樹的條件 示例:例3.7 最左(右)推導(dǎo) 二義性文法 判斷依據(jù) 示例:例3.8 二義性文法與二義性語言的區(qū)別,38,句型能夠構(gòu)造關(guān)聯(lián)語法樹的條件,給定文法G=(VN,VT,P,S),對(duì)于G的任何句型都能構(gòu)造與之關(guān)聯(lián)的語法樹(推導(dǎo)樹)。這棵樹滿足下列4個(gè)條件: 每個(gè)結(jié)點(diǎn)都有一個(gè)標(biāo)記,此標(biāo)記是V的一個(gè)符號(hào)。 根的標(biāo)記是S。 若一結(jié)點(diǎn)n至少有一個(gè)它自己除外的子孫(子結(jié)點(diǎn)),并且有標(biāo)記A,則A肯定在VN中。 如果結(jié)點(diǎn)n的直接子孫,從左到右的次序是結(jié)點(diǎn)n1,n2,nk,其標(biāo)記分別為A1,A2,Ak,那么AA1A2Ak一定是P中的一個(gè)產(chǎn)生式。,39,例3.7,G=(S,A,a,b,P,S),其中P為: SaAS ASbA ASS Sa Aba 右圖是G(aabbaa)的一棵推導(dǎo)樹。,40,最左(右)推導(dǎo),如果在推導(dǎo)的任何一步,其中,是句型,都是對(duì)中的最左(最右)非終結(jié)符進(jìn)行替換,則稱這種推導(dǎo)為最左(最右)推導(dǎo)。 在形式語言中,最右推導(dǎo)常被稱為規(guī)范推導(dǎo)。由規(guī)范推導(dǎo)所得的句型稱為規(guī)范句型。 最左推導(dǎo)示例 SaASaSbASaabASaabbaSaabbaa 最右推導(dǎo)示例 SaASaAaaSbAaaSbbaaaabbaa,41,二義文法的判斷依據(jù),若一個(gè)文法存在某個(gè)句子對(duì)應(yīng)兩棵不同的語法樹,則稱這個(gè)文法是二義的。 或者,若一個(gè)文法存在某個(gè)句子有兩個(gè)不同的最左(右)推導(dǎo),則稱這個(gè)文法是二義的。 如果產(chǎn)生上下文無關(guān)語言的每一個(gè)文法都是二義的,則說此語言是先天二義的。 判定任給的一個(gè)上下文無關(guān)文法是否二義,或它是否產(chǎn)生一個(gè)先天二義的上下文無關(guān)語言,這兩個(gè)問題是遞歸不可解的,即,不存在一個(gè)算法,它能在有限步驟內(nèi),確切判定任給的一個(gè)文法是否為二義的。我們所能做的事是為無二義性尋找一組充分條件(當(dāng)然它們未必都是必要的)。,42,例3.8,文法G=(E,+,*,i,(,),P,E)其中P= Ei EE+E EE*E E(E) 是二義性的,假若規(guī)定了運(yùn)算符“+”與“*”的優(yōu)先順序和結(jié)合規(guī)則,即按慣例,讓“*”的優(yōu)先性高于“+”,且它們都服從左結(jié)合,那么就可以構(gòu)造出一個(gè)無二義文法。 定義表達(dá)式的無二義文法GE: ET|E+T TF|T*F F(E)|i 它和上述文法產(chǎn)生的語言是相同的。即它們是等價(jià)的。,43,二義性文法與二義性語言的區(qū)別,文法的二義性和語言的二義性是兩個(gè)不同的概念。因?yàn)榭赡苡袃蓚€(gè)不同的文法G和G,其中G是二義的,但是卻有L(G)=L(G),也就是說,這兩個(gè)文法所產(chǎn)生的語言是相同的。,44,句型的分析,句型分析是識(shí)別一個(gè)輸入符號(hào)串是否為語法上正確的程序的過程。在語言的編譯實(shí)現(xiàn)中,把完成句型分析的程序稱為分析程序或識(shí)別程序,分析算法又稱識(shí)別算法。 從左到右的分析算法,即總是從左到右地識(shí)別輸入符號(hào)串,首先識(shí)別符號(hào)串中的最左符號(hào),進(jìn)而依次識(shí)別右邊的一個(gè)符號(hào),直到分析結(jié)束。 句型的分析算法分類 句型的分析算法反映語法樹的構(gòu)造過程 句型分析的有關(guān)定義 句型分析的有關(guān)問題,45,句型的分析算法分類,自上而下分析法: 是從文法的開始符號(hào)出發(fā),反復(fù)使用各種產(chǎn)生式,尋找“匹配”于輸入符號(hào)串的推導(dǎo)。 示例:例3.9 自下而上分析法: 從輸入符號(hào)串開始,逐步進(jìn)行“歸約”,直至歸約到文法的開始符號(hào)。 示例,46,兩種方法反映語法樹的構(gòu)造過程,自上而下方法: 自上而下方法是從文法符號(hào)開始,將它做為語法樹的根,向下逐步建立語法樹,使語法樹的末端結(jié)點(diǎn)符號(hào)串正好是輸入符號(hào)串。 自下而上方法: 自下而上方法是從輸入符號(hào)串開始,以它做為語法樹的末端結(jié)點(diǎn)符號(hào)串,自底向上地構(gòu)造語法樹。,47,例3.9:自上而下分析,例:考慮文法GS; ScAd Aab Aa 識(shí)別輸入串w=cabd是否該文法的句子。,推導(dǎo)過程:ScAd cabd,48,示例:自下而上分析,例:考慮文法GS; ScAd Aab Aa 識(shí)別輸入串w=cabd是否該文法的句子。,S A A c a b d c a b d c a b d 規(guī)約過程構(gòu)造的推導(dǎo): cAd cabd S cAd,49,句型分析的有關(guān)定義,令G是一文法,S是文法的開始符號(hào),是文法G的一個(gè)句型。如果有: S A且A 則稱是句型相對(duì)于非終結(jié)符A的短語。特別,如有A 則稱是句型相對(duì)于規(guī)則A的直接短語(也稱簡(jiǎn)單短語)。一個(gè)句型的最左直接短語稱為該句型的句柄。 示例 從句型的推導(dǎo)樹中查找方法,50,示例,文法GE的一個(gè)句型i*i+i。為了敘述方便,將句型改寫為i1*i2+i3。因?yàn)橛校?E F* i2+i3 且Fi1則稱i1是句型i1*i2+i3的相對(duì)于非終結(jié)符F的短語,也是相對(duì)于規(guī)則Fi的直接短語。又有: E i1*F+i3 且Fi2則i2是句型i1*i2+i3的相對(duì)于F的短語,也是相對(duì)于規(guī)則Fi的直接短語,還有: E i1*i2+F 且Fi3則i3也是句型i1*i2+i3的相對(duì)于F的短語,也是相對(duì)于規(guī)則Fi的直接短語。 E T*i2+i3,且T i1則i1是句型i*i2+i3的相對(duì)于T的短語。 E i1*i2+T 且T i3則i3是句型i1*i2+i3的相對(duì)于T的短語。 E E+i3 且E i1*i2則i1*i2是句型i1*i2+i3的相對(duì)于E的短語。 E E 且E i1*i2+i3則i1*i2+i3是句型i1*i2+i3相對(duì)于E的短語。 即i1,i2,i3,i1*i2和i1*i2+i3都是句型i1*i2+i3的短語,而且i1,i2,i3均為直接短語,其中i1是最左直接短語,即句柄。 雖然i2+i3是句型i1*i2+i3的一部分,并不是它的短語,因?yàn)楸M管有E i2+i3,但不存在從文法開始符號(hào)E到i1*E的推導(dǎo)。,51,從句型的推導(dǎo)樹中查找方法,從句型的推導(dǎo)樹上很容易找出句型的短語和直接短語。 設(shè)A是句型的某一子樹的根,其中是形成此子樹的末端結(jié)點(diǎn)的符號(hào)串,則其中是句型的相對(duì)于A的短語。若這個(gè)子樹只有一層分支,則是句型的直接短語。 示例,52,示例:推導(dǎo)樹中找短語,53,句型分析的有關(guān)問題,在自上而下的分析方法中如何選擇使用哪個(gè)產(chǎn)生式進(jìn)行推導(dǎo)? 假定要被代換的最左非終結(jié)符號(hào)是B,且有n條規(guī)則:BA1|A2|An,那么如何確定用哪個(gè)右部去替代B? 在自下而上的分析方法中如何識(shí)別可歸約的串? 在分析程序工作的每一步,都是從當(dāng)前串中選擇一個(gè)子串,將它歸約到某個(gè)非終結(jié)符號(hào),該子串稱為“可歸約串”。 存在確定和不確定分析。,54,實(shí)用說明,有關(guān)文法的實(shí)用限制 上下文無關(guān)文法中的規(guī)則 無用符號(hào)和無用產(chǎn)生式的消除 -產(chǎn)生式的消除 單產(chǎn)生式的消除,55,有關(guān)文法的實(shí)用限制,在實(shí)用中,我們將限制文法中不得含有有害規(guī)則和多余規(guī)則: 有害規(guī)則,是指形為UU的產(chǎn)生式。它對(duì)描述語言顯然是沒有必要的。說它有害,是說它只會(huì)引起文法的二義性。 多余規(guī)則,是指文法中那些連一個(gè)句子的推導(dǎo)都用不到的規(guī)則,這類規(guī)則在文法中以兩種形式出現(xiàn)。一種是文法中某些非終結(jié)符不在任何規(guī)則的右部出現(xiàn),所以任何句子的推導(dǎo)中不可能用到它。 對(duì)文法G=(VN,VT,P,S)來說,為了保證其任一非終結(jié)符A在句子推導(dǎo)中出現(xiàn),必須滿足如下兩個(gè)條件: A必須在某句型中出現(xiàn)。即有S A,其中,屬于(VTVN)* 。 必須能夠從A推出終結(jié)符號(hào)串t來。即A t,其中tVT 。 若程序設(shè)計(jì)語言的文法包含有多余規(guī)則時(shí),其中必定有錯(cuò)誤存在,因此檢查文法是否包含多余規(guī)則是很有必要的。,56,上下文無關(guān)文法中的規(guī)則,上下文無關(guān)文法中某些規(guī)則可具有形式A,稱這種規(guī)則為規(guī)則。 規(guī)則會(huì)使得有關(guān)文法的一些討論和證明變得復(fù)雜,有時(shí)會(huì)限制這種規(guī)則的出現(xiàn)。 上下文無關(guān)文法的相關(guān)定理 定理3.1 定理3.2,57,定理3.1,若L是由文法G=(VN,VT,P,S)產(chǎn)生的語言,P中的每一個(gè)產(chǎn)生式的形式均為A,其中AVN,(VN VT)*(即可能為),則L能由這樣一種文法產(chǎn)生:每一個(gè)產(chǎn)生式或者為A形式,其中AVN, (VN VT)+(即),或者 S且 S不出現(xiàn)在任何產(chǎn)生式右邊。,58,定理3.2,如果G=(VN,VT,P,S)是一個(gè)上下文有關(guān)文法,則存在另一個(gè)上下文有關(guān)文法G1,它所產(chǎn)生的語言與G產(chǎn)生的相同,即L(G)=L(G1),其中G1的開始符號(hào)不出現(xiàn)在G1的任何產(chǎn)生式的右邊。 若G為上下文無關(guān)文法或正規(guī)文法,類似結(jié)論成立。,59,無用符號(hào)和無用產(chǎn)生式的消除,定義:設(shè)G=(VN,VT,P,S)是一文法,我們說G中的一個(gè)符號(hào)x(VNVT)是有用的指x至少出現(xiàn)在一個(gè)句子的推導(dǎo)過程中。即x必須同時(shí)滿足以下兩個(gè)條件: 存在、V*,有S*x 存在wVT*,x*w 否則就說x是無用的。如果一個(gè)產(chǎn)生式的左部或右部含有無用符號(hào),則此產(chǎn)生式稱之為無用產(chǎn)生式。 消除算法 算法1 算法2 示例,60,算法1,1、分別置VN(1)和P(1) 為; 2、對(duì)于P中的每一產(chǎn)生式A ,若 VT* ,則將A置于VN(1) 中; 3、對(duì)于P中的每一產(chǎn)生式A x1x2xm若每個(gè)xi都屬于VN(1) 或VT ,則將A置于VN(1) ; 4、重復(fù)步驟3,直到VN(1)不再增大為止; 5、對(duì)于P中的每一產(chǎn)生式B y1y2yn ,若B及每一個(gè)yi都屬于VN(1) VT ,則將此產(chǎn)生 式B y1y2yn置于P (1)。,61,算法2,1、分別置VN 、VT和P 為; 2、將文法的開始符號(hào)S置入VN中; 3、對(duì)于G (1)中任何形如A x1|x2 | | xm的產(chǎn)生式,若A VN ,則將符號(hào)串x1,x2 , , xm中的全部非終結(jié)符號(hào)置于VN中,而將其中的全部終結(jié)符號(hào)置于VT中; 4、重復(fù)步驟3,直到VN和VT都不再增大為止; 5、將P中左右部?jī)H含VN VT中符號(hào)的所有產(chǎn)生式置P 。,62,示例,文法的定義 已知文法G=(S,U,V,W,a,b,c,P,S),產(chǎn)生式P的組成如下: SaS SW SU Ua VbV Vac WaW 執(zhí)行算法1 執(zhí)行算法2,63,執(zhí)行算法1,第一步,由于產(chǎn)生式Ua、 Vac的右部均為終結(jié)符號(hào)串,故置VN(1) =U,V; 第二步,對(duì)于產(chǎn)生式SU ,由于U VN(1) ,故將S置于中,所以VN(1) =S,U,V; 于是得到以下文法G1: G1=(S,U,V,a,b,c,P (1),S),其中P (1)由如下產(chǎn)生式組成: SaS SU Ua VbV Vac,64,執(zhí)行算法2,第一步,置VN =S; 第二步,因?yàn)镚1中含有產(chǎn)生式SU、Ua ,故應(yīng)將U、a分別置于,即VN =S,U VT =a; 因此得到等價(jià)的且不含無用符號(hào)和無用產(chǎn)生式的文法為G2=(S,U,a,P,S),其中,P由如下產(chǎn)生式組成: SaS SU Ua,65,-產(chǎn)生式的消除,算法3 算法4( 不屬于文法所產(chǎn)生的語言) 算法5 (屬于文法所產(chǎn)生的語言) 示例: 不屬于文法所產(chǎn)生的語言 屬于文法所產(chǎn)生的語言,66,算法3,1、作集合 W1=A|產(chǎn)生式A P; 2、作集合序列 W
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 多部門文明創(chuàng)建活動(dòng)方案
- 大班想辦法活動(dòng)方案
- 天天拔河活動(dòng)方案
- 太陽想吃冰激凌活動(dòng)方案
- 地產(chǎn)圣誕派對(duì)活動(dòng)方案
- 坐商變行商活動(dòng)方案
- 大學(xué)健康活動(dòng)方案
- 夏至手指操活動(dòng)方案
- 復(fù)習(xí)打卡活動(dòng)方案
- 大米購買活動(dòng)方案
- 小學(xué)數(shù)學(xué)單元整體教學(xué)問題與對(duì)策
- 2025蕪湖市鳩江區(qū)裕溪口街道社區(qū)工作者考試真題
- 2025年廣東省深圳市龍華區(qū)中考數(shù)學(xué)二模試卷
- 熊膽粉初稿完整版本
- 堅(jiān)守廉潔底線弘揚(yáng)清風(fēng)正氣
- 小區(qū)物業(yè)管理計(jì)劃書:范文
- 公司法務(wù)部職責(zé)與職能
- 泉州市石獅市2024-2025學(xué)年六年級(jí)下學(xué)期小升初數(shù)學(xué)考前押題卷含解析
- 物流倉儲(chǔ)設(shè)備選型與配置規(guī)范
- 水電工程驗(yàn)收單
- 2025年廣東省高中歷史學(xué)業(yè)水平考試綜合測(cè)評(píng)(一)歷史試題(原卷版+解析版)
評(píng)論
0/150
提交評(píng)論