編譯原理課后答案第三版蔣立源康慕寧編_第1頁(yè)
編譯原理課后答案第三版蔣立源康慕寧編_第2頁(yè)
編譯原理課后答案第三版蔣立源康慕寧編_第3頁(yè)
編譯原理課后答案第三版蔣立源康慕寧編_第4頁(yè)
編譯原理課后答案第三版蔣立源康慕寧編_第5頁(yè)
已閱讀5頁(yè),還剩116頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、編譯原理課后答案(第三版 蔣立源 康慕寧編)第一章 習(xí)題解答1解:源程序是指以某種程序設(shè)計(jì)語(yǔ)言所編寫的程序。目標(biāo)程序是指編譯程序(或解釋程序)將源程序處理加工而得的另一種語(yǔ)言(目標(biāo)語(yǔ)言)的程序。翻譯程序是將某種語(yǔ)言翻譯成另一種語(yǔ)言的程序的統(tǒng)稱。編譯程序與解釋程序均為翻譯程序,但二者工作方法不同。解釋程序的特點(diǎn)是并不先將高級(jí)語(yǔ)言程序全部翻譯成機(jī)器代碼,而是每讀入一條高級(jí)語(yǔ)言程序語(yǔ)句,就用解釋程序?qū)⑵浞g成一段機(jī)器指令并執(zhí)行之,然后再讀入下一條語(yǔ)句繼續(xù)進(jìn)行解釋、執(zhí)行,如此反復(fù)。即邊解釋邊執(zhí)行,翻譯所得的指令序列并不保存。編譯程序的特點(diǎn)是先將高級(jí)語(yǔ)言程序翻譯成機(jī)器語(yǔ)言程序,將其保存到指定的空間中,在

2、用戶需要時(shí)再執(zhí)行之。即先翻譯、后執(zhí)行。 2解:一般說(shuō)來(lái),編譯程序主要由詞法分析程序、語(yǔ)法分析程序、語(yǔ)義分析程序、中間代碼生成程序、代碼優(yōu)化程序、目標(biāo)代碼生成程序、信息表管理程序、錯(cuò)誤檢查處理程序組成。 3解:c語(yǔ)言的關(guān)鍵字有:auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void vola

3、tile while。上述關(guān)鍵字在c語(yǔ)言中均為保留字。 4解:c語(yǔ)言中括號(hào)有三種:,()。其中,用于語(yǔ)句括號(hào);用于數(shù)組;()用于函數(shù)(定義與調(diào)用)及表達(dá)式運(yùn)算(改變運(yùn)算順序)。c語(yǔ)言中無(wú)end關(guān)鍵字。逗號(hào)在c語(yǔ)言中被視為分隔符和運(yùn)算符,作為優(yōu)先級(jí)最低的運(yùn)算符,運(yùn)算結(jié)果為逗號(hào)表達(dá)式最右側(cè)子表達(dá)式的值(如:(a,b,c,d)的值為d)。 5略 第二章 習(xí)題解答1.(1)答:26*26=676 (2)答:26*10=260 (3)答:a,b,c,.,z,a0,a1,.,a9,aa,.,az,.,zz,a00,a01,.,zzz,共26+26*36+26*36*36=34658個(gè)2.構(gòu)造產(chǎn)生下列語(yǔ)言的

4、文法 (1)anbn|n0 解:對(duì)應(yīng)文法為g(s) = (s,a,b, s| asb ,s) (2)anbmcp|n,m,p0 解:對(duì)應(yīng)文法為g(s) = (s,x,y,a,b,c,sas|x,xbx|y,ycy|,s) (3)an # bn|n0cn # dn|n0 解:對(duì)應(yīng)文法為g(s) = (s,x,y,a,b,c,d,#, sx, sy,xaxb|#,ycyd|# ,s) (4)w#wr# | w?0,1*,wr是w的逆序排列 解:g(s) = (s,w,r,0,1,#, sw#, w0w0|1w1|# ,s) (5)任何不是以0打頭的所有奇整數(shù)所組成的集合 解:g(s) = (s,a

5、,b,i,j,-,0,1,2,3,4,5,6,7,8,9,sj|ibj,b0b|ib|e, ij|2|4|6|8, jà1|3|5|7|9,s) (6)所有偶數(shù)個(gè)0和偶數(shù)個(gè)1所組成的符號(hào)串集合 解:對(duì)應(yīng)文法為 s0a|1b|e,a0s|1c b0c|1s c1a|0b3.描述語(yǔ)言特點(diǎn) (1)s10s0saaabaaa 解:本文法構(gòu)成的語(yǔ)言集為:l(g)=(10)nabma0n|n, m0。 (2)sss s1a0a1a0a 解:l(g)=1n10n11n20n2 1nm0nm |n1,n2,nm0;且n1,n2,nm不全為零該語(yǔ)言特點(diǎn)是:產(chǎn)生的句子中,0、1個(gè)數(shù)相同,并且若干相接的1

6、后必然緊接數(shù)量相同連續(xù)的0。 (3)s1asb0a1aacbb0bcc1c0c 解:本文法構(gòu)成的語(yǔ)言集為:l(g)=1p1n0n|p1,n01n0n0q|q1,n0,特點(diǎn)是具有1p1n0n 或1n0n0q形式,進(jìn)一步,可知其具有形式1n0mn,m0,且n+m>0。 (4)sbadcaagsgaa 解:可知,s=>=>basndc n0 該語(yǔ)言特點(diǎn)是:產(chǎn)生的句子中,是以ba開頭dc結(jié)尾的串,且ba、dc個(gè)數(shù)相同。 (5)sasssa 解:l(g)=a(2n-1)|n1可知:奇數(shù)個(gè)a4.解:此文法產(chǎn)生的語(yǔ)言是:以終結(jié)符a1 、a2 an 為運(yùn)算對(duì)象,以、為運(yùn)算符,以、為分隔符的布

7、爾表達(dá)式串5. 5.1解:由于此文法包含以下規(guī)則:aae,所以此文法是0型文法。 5.2證明:略6.解:(1)最左推導(dǎo):<程序>t<分程序>t<標(biāo)號(hào)>:<分程序>tl:<分程序>tl:<標(biāo)號(hào)>:<分程序>t l:l:<分程序>t l:l:<無(wú)標(biāo)號(hào)分程序>t l:l:<分程序首部>;<復(fù)合尾部>t l:l:<分程序首部>;<說(shuō)明>;<復(fù)合尾部>t l:l:begin<說(shuō)明>;<說(shuō)明>;<復(fù)合尾部>

8、;t l:l:begin d;<說(shuō)明>;<復(fù)合尾部>t l:l:begin d;d;<復(fù)合尾部>t l:l:begin d;d;<語(yǔ)句>;<復(fù)合尾部>t l:l:begin d;d;s;<復(fù)合尾部.t l:l:begin d;d;s;<語(yǔ)句> endt l:l:begin d;d;s;s end最右推導(dǎo):<程序>t<分程序>t<標(biāo)號(hào)>:<分程序>t<標(biāo)號(hào)>:<標(biāo)號(hào)>:<分程序>t<標(biāo)號(hào)>:<標(biāo)號(hào)>:<無(wú)標(biāo)

9、號(hào)分程序>t<標(biāo)號(hào)>:<標(biāo)號(hào)>:<分程序首部>;<復(fù)合尾部>t<標(biāo)號(hào)>:<標(biāo)號(hào)>:<分程序首部>;<語(yǔ)句>;<復(fù)合尾部>t<標(biāo)號(hào)>:<標(biāo)號(hào)>:<分程序首部>;<語(yǔ)句>;<語(yǔ)句>;endt<標(biāo)號(hào)>:<標(biāo)號(hào)>:<分程序首部>;<語(yǔ)句>;s;endt<標(biāo)號(hào)>:<標(biāo)號(hào)>:<分程序首部>;s;s;endt<標(biāo)號(hào)>:<標(biāo)號(hào)>:&

10、lt;分程序首部>;說(shuō)明;s;s;endt<標(biāo)號(hào)>:<標(biāo)號(hào)>:<分程序首部>;d;s;s;endt<標(biāo)號(hào)>:<標(biāo)號(hào)>:begin 說(shuō)明;d;s;s;endt<標(biāo)號(hào)>:<標(biāo)號(hào)>:begin d;d;s;s;endt<標(biāo)號(hào)>: l:begin d;d;s;s;endtl:l:begin d;d;s;s;end(2)句子l:l:begin d;d;s;s end的相應(yīng)語(yǔ)法樹是:7.解:aacb是文法gs中的句子,相應(yīng)語(yǔ)法樹是:最右推導(dǎo):s=>aacb=>aacb=>aacb最左推導(dǎo)

11、:s=>aacb=>aacb=>aacb(2)aabacbadcd不是文法gs中的句子因?yàn)槲姆ㄖ械木渥硬豢赡芤苑墙K結(jié)符d結(jié)尾(3)aacbccb不是文法gs中的句子可知,aacbccb僅是文法gs的一個(gè)句型的一部分,而不是一個(gè)句子。(4)aacabcbcccaacdca不是文法gs中的句子因?yàn)榻K結(jié)符d后必然要跟終結(jié)符a,所以不可能出現(xiàn)dc這樣的句子。(5)aacabcbcccaacbca不是文法gs中的句子由(1)可知:aacb可歸約為s,由文法的產(chǎn)生式規(guī)則可知,終結(jié)符c后不可能跟非終結(jié)符s,所以不可能出現(xiàn)caacb這樣的句子。8.證明:用歸納法于n,n=1時(shí),結(jié)論顯然成立。

12、設(shè)n=k時(shí),對(duì)于12.kt*b,存在i:i=1,2,.,k,it*bi成立,現(xiàn)在設(shè)12. kk+1t*b,因文法是前后文無(wú)關(guān)的,所以12. k可推導(dǎo)出b的一個(gè)前綴b',k+1可推導(dǎo)出b的一個(gè)后綴=b"(不妨稱為b k+1)。由歸納假設(shè),對(duì)于b',存在i :i=1,2,.,k,b'=12.k,使得it*bi成立,另外,我們有k+1t*b"(=b k+1)。即n=k+1時(shí)亦成立。證畢。9.證明:(1)用反證法。假設(shè)首符號(hào)為終結(jié)符時(shí),的首符號(hào)為非終結(jié)符。即設(shè):=a;=a且 =>*。由題意可知:=at t a=,由于文法是cfg,終結(jié)符a不可能被替換空

13、串或非終結(jié)符,因此假設(shè)有誤。得證;(2)同(1),假設(shè):的首符號(hào)為非終結(jié)符時(shí),首符號(hào)為終結(jié)符。即設(shè):=a;=a且=at t a=,與(1)同理,得證。10.證明:因?yàn)榇嬖诰渥樱篴bc,它對(duì)應(yīng)有兩個(gè)語(yǔ)法樹(或最右推導(dǎo)):stabtabctabcstdctdctabc所以,本文法具有二義性。11.解:(1) stabtaasbtaacbtbaacbtbbaacbtbbaacb上面推導(dǎo)中,下劃線部分為當(dāng)前句型的句柄。對(duì)應(yīng)的語(yǔ)法樹為:全部的短語(yǔ):第一個(gè)a (a1)是句子bbaacb相對(duì)于非終結(jié)符a (a1) (產(chǎn)生式a?a)的短語(yǔ)(直接短語(yǔ));b1a1是句子bbaacb相對(duì)于非終結(jié)符a2的短語(yǔ);b2b

14、1a1是句子bbaacb相對(duì)于非終結(jié)符a3的短語(yǔ);c是句子bbaacb相對(duì)于非終結(jié)符s1(產(chǎn)生式s?c)的短語(yǔ)(直接短語(yǔ));a2cb3是句子bbaacb相對(duì)于非終結(jié)符b的短語(yǔ);b2b1a1a2cb3是句子bbaacb相對(duì)于非終結(jié)符s2的短語(yǔ);注:符號(hào)的下標(biāo)是為了描述方便加上去的。(2)句子(b)a(a)(b)的最右推導(dǎo):st(as)t(a(b)t(saa)(b)t(sa(a)(b)t(b)a(a)(b)相應(yīng)的語(yǔ)法樹是:(3)解:iii*i+對(duì)應(yīng)的語(yǔ)法樹略。最右推導(dǎo):e tt=>f=>fpt fet fet+t fef+t fep+t fei+tfti+t ftf*i+tftp*i+

15、t fti*i+tffi*i+t fpi*i+tfii*i+t pii*i+tiii*i+12.證明:充分性:當(dāng)前文法下的每一符號(hào)串僅有一個(gè)句柄和一個(gè)句柄產(chǎn)生式t對(duì)當(dāng)前符號(hào)串有唯一的最左歸約t對(duì)每一步推導(dǎo)都有唯一的最右推導(dǎo)t有唯一的語(yǔ)法樹。必要性:有唯一的語(yǔ)法樹t對(duì)每一步推導(dǎo)都有唯一的最右推導(dǎo)t對(duì)當(dāng)前符號(hào)串有唯一的最左歸約t當(dāng)前文法下的每一符號(hào)串僅有一個(gè)句柄和一個(gè)句柄產(chǎn)生式13.化簡(jiǎn)下列各個(gè)文法(1)解:sbcacdacsa| cccccs | c(2)解:saab | fa | gae | ddadeabf(3)解:sac14.消除下列文法中的產(chǎn)生式(1)解:saas | as | bacs

16、(2)解:saaa | aa | aabac| bc | dae| de15.消除下列文法中的無(wú)用產(chǎn)生式和單產(chǎn)生式(1)消除后的產(chǎn)生式如下:sab | bcbdb | bcbdb | db(2)消除后的產(chǎn)生式如下:ssa | sb |()|(s)| |sa() |(s)|sbà |s(3)消除后的產(chǎn)生式如下:ee+t | t*f | (e) | pf | itt*f | (e) | pf | i fpf | (e) | i p(e) | i第三章 習(xí)題解答 1從略23 假設(shè)w:表示載狐貍過(guò)河,g:表示載山羊過(guò)河,c:表示載白菜過(guò)河用到的狀態(tài)1:狐貍和山羊在左岸2:狐貍和白菜載左岸3:

17、羊和白菜在左岸 4:狐貍和山羊在右岸5:狐貍和白菜在右岸 6:山羊和白菜在右岸f:全在右岸4 證明:只須證明文法g:ab 或a (a,bvn, vt+)等價(jià)于g1:aab 或aa (avt+)g1的產(chǎn)生式中 aab, 則b也有bbc ,ccd . 所以有 a abcb,a,b,cvt,bvn所以與g等價(jià)。2)g的產(chǎn)生式ab,vt+,因?yàn)槭亲址钥隙ù嬖谥粋€(gè)終結(jié)符a, 使aab可見兩者等價(jià),所以由此文法產(chǎn)生的語(yǔ)言是正規(guī)語(yǔ)言。5 6 根據(jù)文法知其產(chǎn)生的語(yǔ)言是l=ambnci| m,n,i1可以構(gòu)造如下的文法vn=s,a,b,c, vt=a,b,cp= s aa, aaa, abb, bbb

18、, bcc, ccc, cc其狀態(tài)轉(zhuǎn)換圖如下:7 (1) 其對(duì)應(yīng)的右線性文法是:a 0d, b0a,b1c,c1|1f,c1|0a,f0|0e|1a,d0b|1c,e1c|0b(2) 最短輸入串011(3) 任意接受的四個(gè)串011,0110,0011,000011(4) 任意以1打頭的串.8 從略。9(2)相應(yīng)的3型文法(i) s aasbs aaa abb ba|ab bb|bb(ii) saa|a sbb bab | bb aab ab|ba(iii) saa sbb aba aac bab bbc ca|ac cb|bc(iv) sbs saa aac abb bab bbc ca|ac

19、 cb|bc(3)用自然語(yǔ)言描述輸入串的特征(i) 以任意個(gè)(包括0)b開頭,中間有任意個(gè)(大于1)a,跟一個(gè)b,還可以有一個(gè)由a,b組成的任意字符串(ii) 以a打頭,后跟任意個(gè)(包括0)b(iii)以a打頭,中間有任意個(gè)(包括0)b,再跟a,最后由一個(gè)a,b所組成的任意串結(jié)尾或者以b打頭,中間有任意個(gè)(包括0)a,再跟b,最后由一個(gè)a,b所組成的任意串結(jié)尾(iv)以任意個(gè)(包括0)b開頭,中間跟aa最后由一個(gè)a,b所組成的任意串結(jié)尾或者以任意個(gè)(包括0)b開頭,中間跟ab后再接任意(包括0)a再接b,最后由一個(gè)a,b所組成的任意串結(jié)尾10 (1)g1的狀態(tài)轉(zhuǎn)換圖:g2的狀態(tài)轉(zhuǎn)換圖:(2)

20、g1等價(jià)的左線性文法:sbb,sdd,dc,bdb,cbc,bab,b,aag2等價(jià)的右線性文法:sdd,sab,dc,babc,bbb,bba,b,cca,aa(3)對(duì)g1文法,abb的推導(dǎo)序列是:s=>aa=>abb=>abb對(duì)g1文法,abb的推導(dǎo)序列是:s=>bb=>abb=>abb對(duì)g2文法,aabca的推導(dǎo)序列是:s=>aa=>cca=>babca=>aabca對(duì)g2文法,aabca的推導(dǎo)序列是:s=>ab=>aabc=>aabca=>aabca(4)對(duì)串a(chǎn)cbd來(lái)說(shuō),g1,g1文法都不能產(chǎn)生。11

21、將右線性文法化為左線性文法的算法:(1)對(duì)于g中每一個(gè)形如aab的產(chǎn)生式且a是開始符,將其變?yōu)閎a,否則若a不是開始符,baa; (2)對(duì)于g中每一個(gè)形如aa的產(chǎn)生式,將其變?yōu)閟aa 12 (1)狀態(tài)矩陣是:記s=q0 b=q1 a b=q2 s a=q3 ,最小化和確定化后如圖(2)記 s=q0, a=q1,b s=q2 最小化和確定化后的狀態(tài)轉(zhuǎn)換圖如下13 (1)將具有動(dòng)作的nfa確定化后,其狀態(tài)轉(zhuǎn)換圖如圖:記 s0,s1,s3=q0 s1=q1 s2 s3=q2 s3=q3 (2) 記s=q0 z=q1 u r=q2 s x=q3 y u r=q4 x s u=q5 y u r z=q6

22、 z s=q714(1)從略(2)化簡(jiǎn)后s0和s1作為一個(gè)狀態(tài),s5和s6作為一個(gè)狀態(tài)。狀態(tài)轉(zhuǎn)換圖如圖15從略。16從略。(1) r*表示的正規(guī)式集是,r,rr,rrr, (|r)*表示的正規(guī)式集是, ,r,rr,rrr,=,r,rr,rrr,|rr*表示的正規(guī)式集是,r,rr,rrr,(r*)*=r*=,r,rr,rrr,所以四者是等價(jià)的。(2)(rs)*r表示的正規(guī)式集是,rs,rsrs,rsrsrs,r =r,rsr,rsrsr,rsrsrsr,r(sr)* 表示的正規(guī)式集是r,sr,srsr,srsrsr, = r,rsr,rsrsr,rsrsrsr,所以兩者等價(jià)。18 寫成方程組s=

23、at+as(1)b=cb+c(2)t=bt+bb(3)所以b=c*ct=b*bc*cs=a*ab*bc*cg1: s=aa+b(1) b=cc+b(2)a=abs+bb (3)c=d(4)d=bb+d(5)把(4)(5)代入(2),得bc(bb+d)+b=cbb+cd+b 得b=(cb)*(cd|b),代入(3)得a=abs+b(cb)*(cd|b)把它打入(1)得s=a(abs+b(cb)*(cd|b)+ (cb)*(cd|b)=aabs+ab(cb)*(cd|b) + (cb)*(cd|b)=(aab)*( ab(cb)*(cd|b)| (cb)*(cd|b)g2:s=aa+b (1)a=

24、cc+bb (2)b=bb+a(3)c=d+bab(4)d=d(5)可得 d=db=ab*c=ab*ab|ba=(ab*ab|b)c + ab*bs=(ab*ab|b)ca+ab*ba +ab*=(ab*ab|b)ca| ab*ba| ab*20識(shí)別此語(yǔ)言的正規(guī)式是s=labeld(d|,d)*; 從略。 21 從略。22 構(gòu)造nfa其余從略。 23 下面舉一個(gè)能夠識(shí)別1,2,3,10,20,100的例子,讀者可以推而廣之。%#include <stdio.h>#include <string.h>#include <ctype.h>#define on1#

25、define tw 2#define thre 3#define te 10#define twent 20#define hundre 100#define white9999%uppera-z%onereturn on;tworeturn tw;threereturn thre;tenreturn te;twentyreturn twent;hundredreturn hundre;" "+|treturn white;nreturn0;%main(int argc,char *argv)int c,i=0;char tmp30;if (argc=2)if (yyin=

26、fopen(argv1,"r")=null)printf("can't open %sn",argv1);exit(0);while (c=yylex()!=0)switch(c)case on:c=yylex();if (c=0) goto i+=1;label;c=yylex();if (c=hundre)i+=100;else i+=1;break;case tw:c=yylex();c=yylex();if (c=hundre)i+=200;else i+=2;break;case twent: i+=20;break;case te:i

27、+=10;break;default:break;/*while*/label: printf("%dn",i);return;24 (1)dn表示的正規(guī)集是長(zhǎng)度為2n任意a和b組成的字符串。此正規(guī)式的長(zhǎng)度是2n 用來(lái)識(shí)別dn的dfa至多需要2n1個(gè)狀態(tài)。 25 從略。26(1)由括住的,中間由任意個(gè)非組成的字符串, 如,a,defg等等。(2)匹配一行僅由一個(gè)大寫字母和一個(gè)數(shù)字組成的串,如a1,f8,z2等。(3)識(shí)別rn和除數(shù)字字符外的任何字符。由和括住的,中間由兩個(gè)或者非和n組成的任意次的字符串。如, a,bb,def,等等 27oxx0-9*a-fa-f*|0-9+

28、|(a-za-z|xx0-70-7a-fa-f|0010-70-7|a-z)28a-za-z_+0-9*a-za-z_*29 參考程序如下:%#include <stdio.h>#include <string.h>#include <ctype.h>#define upper2#define white3%uppera-z%upper+returnupper;t|" "+returnwhite;%main(int argc,char *argv)int c,i;if (argc=2)if (yyin=fopen(argv1,"

29、r")=null)printf("can't open %sn",argv1);exit(0); while (c=yylex()!=eof)if (c=2)for (i=0;yytexti;i+)printf("%c",tolower(yytexti);yytext0='000'if (c=3)printf(" ");else printf("%s",yytext);return;yywrap()return ;30 從略。 第四章習(xí)題參考答案1.解: (1)s(s)z21|()

30、z21|sz31|z31a(s)z22|()z22|sz32|z32b(s)z23|()z23|sz33|z33z11|az11|bz21z12az12|bz22z13az13|bz23z21z11z22|z12z23z13z31z21z32z22z33|z23(2)sbz11|az21abz12|az22z11| az21z12az22z21sz21z22|sz22(3)s(t)z11 | az11 | z11s(t)z12 | az12 | z12z11| z21z12z22z21,sz21z22|,sz222.解: sabb1,1.1(表示第1步,用產(chǎn)生式1.1推導(dǎo),以下同)cabbb2

31、,2.1edabbb3,4.1edcabbb4,2.1ededabbbb5,4.1edaabbbb5,4.2 (不符合,改寫第5步,用4.2)edbfbbb4,2.2edcsdfbbb5,3.1ededsdfbbb6,4.1edasdfbbb6,4.2eddfbbb5,3.2eddfbbcsd6,3.1eddfbbedsd7,4.1eddfbbasd7,4.2eddfbbd6,3.23.解:以下save表示save token_pointer value, restore表示restore token_pointer value。 (1)文法沒有左遞歸。function p:boolean;b

32、egin save;p:=true;if next_token=”begin” thenif next_token=d thenif next_token=; thenif x thenif next_token=”end” then return;restore;p:=false;end;function x:boolean;beginsave;x:=true;if next_token=d thenif next_token=; thenif x then return;restore;if next_token=s thenif y then return;restore;x:=fals

33、e;end;function y:boolean;beginsave;y=true;if next_token=; thenif next_token=s thenif y then return;restore;end;(2)消去文法左遞歸,并記為:pbegin s endsa|cav:=ec if e then sevee +ve|vifunction p:boolean;beginsave;p:=true;if next_token=”begin” thenif s thenif next_token=”end” then return;restore;p:=false;end;func

34、tion a:boolean;beignsave;a:=true;if v thenif next_token=”:=” thenif e then return;restore;a:=flase;end;function s:boolean;beignsave;s:=true;if a then return;restore;if c then return;restore;s:=false;end;function c:boolean;beginsave;c:=true;if next_token=”if” thenif e then if next_token=”then” thenif

35、 s then return;restore;c:=false;end;function e:boolean;beginsave;e:=true;if v thenif ep then return;restore;e:=false;end;function ep:boolean;beingsave;ep:=true;if next_token=+ thenif v thenif e then return;return;end;4.解: 5.證:因?yàn)槭亲筮f歸文法,所以必存在左遞歸的非終結(jié)符a,及形如a|的產(chǎn)生式,且t* ad. 則first(ad) first(),從而first() fir

36、st(),即文法不滿足ll(1)文法條件。得證。6.證:ll(1)文法的分析句子過(guò)程的每一步,永遠(yuǎn)只有唯一的分析動(dòng)作可進(jìn)行?,F(xiàn)在,假設(shè)ll(1)文法g是二義性文法,則存在句子,它有兩個(gè)不同的語(yǔ)法樹。即存在著句子有兩個(gè)不同的最左推導(dǎo)。從而可知,用ll(1)方法進(jìn)行句子的分析過(guò)程中的某步中,存在兩種不同的產(chǎn)生式替換,且均能正確進(jìn)行語(yǔ)法分析,即ll(1)分析動(dòng)作存在不確定性。與ll(1)性質(zhì)矛盾。所以,g不是ll(1)文法。 7.解: (1)d產(chǎn)生式兩個(gè)候選式fd和f的first集交集不為空,所以不是ll(1)的。(2)此文法具有左遞歸性,據(jù)第5題結(jié)論,不是ll(1)的。8.解: (1)消除左遞歸性

37、,得:sbz11|az21abz12|az22z11bz11|z12bz12z21bz11|az21z22bz12|az22|消除無(wú)用產(chǎn)生式得:sbz11|az21z11bz11|z21bz11|az21此文法已滿足ll(1)文法的三個(gè)條件,所以gs: sbz11|az21z11bz11|z21bz11|az21(2) g文法的各非終結(jié)符的first 集和follow集:產(chǎn)生式 first 集 follow集 sbz11az21 ba # z11bz11 b # z21bz11az21 ba # ll(1)分析表為: a b # s az21 bz11 z11 bz11 z21 az21 bz

38、11 9.解: (1)產(chǎn)生式 first集 follow集 ssabbb bb #,a,c asa ba c bac a,b #,a,c (2)將ssab | bb改寫為sbbs,s abs|,可驗(yàn)證,新文法是ll(1)的。10.解: 1)為方便書寫,記:<布爾表達(dá)式>為a,<布爾因子>為b,<布爾二次量>為c,<布爾初等量>為d,原文法可以簡(jiǎn)化為: aab | b bbc | ccd | dd(a) | true | false,顯然,文法含有左遞歸,消去后等價(jià)ll(1)文法為:aba a ba| bcb,b cb|cd|dd(a)| true

39、|false(2)略證:若ll(1)文法g有形如baaab的產(chǎn)生式,且at+及at*ag,根據(jù)first集follow集的構(gòu)造算法可知,first(a)中一切非加到follow(a)中,則afollow(a);又因?yàn)閍first(ag),所以兩集合相交非空,因此,g不是ll(1)文法;與前提矛盾,假設(shè)不成立,得證。 解: (1) s a ( a ) b s = = a = < = < ( = = < < < a > = <> < > > ) > > > > > b > > 不是簡(jiǎn)單優(yōu)先文

40、法。(2) s r t ( ) a , s > = r = t > ( < = < < < < ) > > > > a > > , < = < < < 是簡(jiǎn)單優(yōu)先文法。(3) s r ( a , ) s = < < r > > ( = < < a > > , = < < ) > > 是簡(jiǎn)單優(yōu)先文法。首先消去無(wú)用產(chǎn)生式ze, ze+t s z t # i ( ) s z = = t > > # = < &l

41、t; < i > > ( = < < < ) > > 化簡(jiǎn)后的文法是簡(jiǎn)單優(yōu)先文法;解: s a / a s > > a = < =< = / > > a > > a和/之間同時(shí)有關(guān)系=和<,所以不是簡(jiǎn)單優(yōu)先文法;提示:分析教材中給出的算法,選擇一種合適的表示給定文法的方法(盡量簡(jiǎn)單),使得對(duì)文法的輸入比較簡(jiǎn)單的同時(shí)(需要把輸入轉(zhuǎn)化為計(jì)算機(jī)語(yǔ)言表示,這種轉(zhuǎn)化應(yīng)該盡量簡(jiǎn)單),能夠比較簡(jiǎn)單地構(gòu)造3個(gè)基本關(guān)系矩陣(=,lead和last)。 證明:設(shè)xjxj+1.xi是滿足條件xj-1<xj=x

42、j+1=.=xi >xi+1的最左子串。由=關(guān)系的定義,可知xjxj+1.xi必出現(xiàn)在某產(chǎn)生式的右部中。又因xj-1<xj可知xj-1與xj不處于同一產(chǎn)生式,且xj是某右部的首符。同理,xi為某產(chǎn)生式的尾符號(hào)。即存在產(chǎn)生式 uxjxj+1.xi設(shè) st* aub其中,at*. xj-1 ,bt* xi+1. 對(duì)于aub可構(gòu)造一語(yǔ)法樹,并通過(guò)對(duì)其剪枝(歸約),直到u出現(xiàn)在句柄中。從而xjxj+1.xi必為句柄。反之,若xjxj+1.xi是句柄,由簡(jiǎn)單優(yōu)先關(guān)系的定義,必滿足上述條件。 解:為描述方便,用符號(hào)表示各非終結(jié)符:d=<變量說(shuō)明>,l=<變量表>, v=

43、 <變量>,t=<類型>,a=var,則消去v,并采用分層法改寫文法,得到:daw:t;wlll,i|itr|n|b|c 其全部簡(jiǎn)單優(yōu)先關(guān)系是: d w t l a : ; , i r|n|b|c d w = t = l > = a = < < : = < ; , > > > = i r|n|b|c > 是簡(jiǎn)單優(yōu)先文法。證:設(shè)stna,我們對(duì)n用歸納法,證明a不含兩個(gè)非終結(jié)符相鄰情況。n=1時(shí),sta,即sa是文法的產(chǎn)生式,根據(jù)定義,它不含上述情況。設(shè)n=k時(shí),上述結(jié)論成立,且設(shè)stkdab,由歸納假設(shè),a兩側(cè)必為終結(jié)符。

44、我們?cè)龠M(jìn)行一步推導(dǎo),得stkdabtdub, 其中,au是文法中的產(chǎn)生式,由定義,u中不含兩個(gè)非終結(jié)符相鄰情況,從而dub兩個(gè)非終結(jié)符相鄰情況。得證。 證:由于g不是算符文法,g中至少有一個(gè)產(chǎn)生式,其右部含有兩個(gè)非終結(jié)符相鄰的情況。不失一般性,設(shè)其形為uxaby,x,yv*,由于文法不含無(wú)用產(chǎn)生式,則必存在含有u的句型dub,即存在推導(dǎo)st*dubtdxabyb.得證。 文法為:eea | aaa*t | a/t | ttt+v | t-v | vvi | (e) 解: (1)構(gòu)造算符優(yōu)先矩陣: - * ( ) i # - >< >< < > < &g

45、t; * >< > < > < ( < < < = < ) > > > > i > > > > # < < < < (2)在(-,-)、(-,*)和(*,-)處有多重定義元素,不是算符優(yōu)先文法;(3)改寫方法:將ee-t中的減號(hào)與f-p中的賦值運(yùn)算符強(qiáng)制規(guī)定優(yōu)先關(guān)系; 或者將f-p中的賦值運(yùn)算符改為別的符號(hào)來(lái)表示; (1)證明:由設(shè)句型a =ua中含a的短語(yǔ)不含u,即存在a,a=>*ay,則a可歸約為a =uaü*ua=b,b是g的一個(gè)句型,這與g

46、是算符文法矛盾,所以,a中含有a的短語(yǔ)必含u。 (2)的證明與(1)類似,略。證:(1)對(duì)于a=au是句型,必有st*a(=au) t+ab.即在歸約過(guò)程中,b先于a被歸約,從而,a<b.對(duì)于(2)的情況類似可以證明。 證明略. 證明略. 證明略。 證:(1) 用反證法。設(shè)沒有短語(yǔ)包含b但是不包含a,則a,b一定同時(shí)位于某個(gè)短語(yǔ)中,從而必使得a,b同時(shí)位于同一產(chǎn)生式的右部,所以a=b,與g是算符優(yōu)先文法(=與<不能并存)矛盾。 (2)、(3)類似可證。證:只要證u中不含有除自身以外的素短語(yǔ)。設(shè)有這樣的素短語(yǔ)存在,即存在bx···by是素短語(yǔ),其中1<x或者y<n之一成立。因素短語(yǔ)是短語(yǔ),根據(jù)短語(yǔ)定義,則必有:1<xtbx-1<bx或y<ntby>by+1,與bx-1=bx及 by=by+1矛盾,得證。 提示:根據(jù)27題的結(jié)論,只要證u是句型的短語(yǔ),根據(jù)=關(guān)系的定義容易知道u是

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論