編譯原理期末總復(fù)習(xí)題(含答案)_第1頁
編譯原理期末總復(fù)習(xí)題(含答案)_第2頁
編譯原理期末總復(fù)習(xí)題(含答案)_第3頁
編譯原理期末總復(fù)習(xí)題(含答案)_第4頁
編譯原理期末總復(fù)習(xí)題(含答案)_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第八節(jié)習(xí)題一、單項(xiàng)選擇題

1、將編譯程序分成若干個“遍”是為了」O

a.提高程序的執(zhí)行效率

b.使程序的結(jié)構(gòu)更加清晰

c.利用有限的機(jī)器內(nèi)存并提高機(jī)器的執(zhí)行效率

d.利用有限的機(jī)器內(nèi)存但降低了機(jī)器的執(zhí)行效率

2、構(gòu)造編譯程序應(yīng)掌握3o

a.源程序b.目標(biāo)語言

c.編譯方法d.以上三項(xiàng)都是

3、變量應(yīng)當(dāng)c0

a.持有左值b.持有右值

c.既持有左值又持有右值d.既不持有左值也不持有右值

4、編譯程序絕大多數(shù)時間花在」—上。

a.出錯處理b.詞法分析

c.目標(biāo)代碼生成d.管理表格

5、d不可能是目標(biāo)代碼。

a.匯編指令代碼b.可重定位指令代碼

c.絕對指令代碼d.中間代碼

6、使用可以定義一個程序的意義。

a.語義規(guī)則b.詞法規(guī)則

c.產(chǎn)生規(guī)則d.詞法規(guī)則

7、詞法分析器的輸入是3o

a.單詞符號串b.源程序

c.語法單位d.目標(biāo)程序

8、中間代碼生成時所遵循的是

a.語法規(guī)則b.詞法規(guī)則

c.語義規(guī)則d.等價變換規(guī)則

9、編譯程序是對3o

a.匯編程序的翻譯b.高級語言程序的解釋執(zhí)行

c.機(jī)器語言的執(zhí)行d.高級語言的翻譯

10、語法分析應(yīng)遵循b

a.語義規(guī)則b.語法規(guī)則

c.構(gòu)詞規(guī)則d.等價變換規(guī)則

解答

1、將編譯程序分成若干個“遍”是為了使編譯程序的結(jié)構(gòu)更加清晰,故選

bo

2、構(gòu)造編譯程序應(yīng)掌握源程序、目標(biāo)語言及編譯方法等三方面的知識,故

選do

3、對編譯而言,變量既持有左值又持有右值,故選c。

4、編譯程序打交道最多的就是各種表格,因此選d。

5、目標(biāo)代碼包括匯編指令代碼、可重定位指令代碼和絕對指令代碼3種,

因此不是目標(biāo)代碼的只能選d。

6、詞法分析遵循的是構(gòu)詞規(guī)則,語法分析遵循的是語法規(guī)則,中間代碼生

成遵循的是語義規(guī)則,并且語義規(guī)則可以定義一個程序的意義。因此選a。

7、b8、c9、d10、c

二、多項(xiàng)選擇題

1、編譯程序各階段的工作都涉及到」£一。

a.語法分析b.表格管理c.出錯處理

d.語義分析e.詞法分析

2、編譯程序工作時,通常有abce階段。

a.詞法分析b.語法分析語義分析?c.中間代碼生成

中間代碼優(yōu)化

d.語義檢查e.目標(biāo)代碼生成

解答

1.b、c2.a、b>c、e

三、填空題

1、解釋程序和編譯程序的區(qū)別在于是否生成目標(biāo)程序(解釋不產(chǎn)生目

標(biāo)程序,邊翻譯邊執(zhí)行。

2、編譯過程通??煞譃?個階段,分別是詞法分析、語法分析語

義分析中間代碼生成、代碼優(yōu)化和目標(biāo)代碼生成。

3、編譯程序工作過程中,第一段輸入是源程序,最后階段的輸出為

目標(biāo)程序程序。

4、編譯程序是指將源程序程序翻譯成目標(biāo)程序程序的

程序。解答

是否生成目標(biāo)程序2、詞法分析中間代碼生成3、源程序目標(biāo)代

碼生成4、源程序目標(biāo)語言

一、單項(xiàng)選擇題

1、文法G:S-xSx|y所識別的語言是」

a.xyxb.(xyx)*c.xnyxn(n>0)d.x*yx*(是指多個x)

2、文法G描述的語言L(G)是指ab。

a.L(G)={a|S當(dāng)a,aGVT*}b.L(G)={a|S=Ia,aeVT*}

c.L(G)={a|S4a,ae(VTUVN*)}d.L(G)={a心當(dāng)a,aG(VTUVN*)}

3、有限狀態(tài)自動機(jī)能識別—o

a.上下文無關(guān)文法b.上下文有關(guān)文法

c.正規(guī)文法d.短語文法

4、設(shè)G為算符優(yōu)先文法,G的任意終結(jié)符對a、b有以下關(guān)系成立一

a.若f(a)>g(b),則a>bb.若f(a)<g(b),則a<b

c.a~b都不一定成立d.a?b一定成立

5、如果文法G是無二義的,則它的任何句子a。

a.最左推導(dǎo)和最右推導(dǎo)對應(yīng)的語法樹必定相同

b.最左推導(dǎo)和最右推導(dǎo)對應(yīng)的語法樹可能不同

c.最左推導(dǎo)和最右推導(dǎo)必定相同

d.可能存在兩個不同的最左推導(dǎo),但它們對應(yīng)的語法樹相同

6、由文法的開始符經(jīng)0步或多步推導(dǎo)產(chǎn)生的文法符號序列是—o

a.短語b.句柄c.句型d.句子

7、文法G:E—E+T|T

T—T*P|P

P一(E)|I

則句型P+T+i的句柄和最左素短語為。

.P+T和ib.P和P+Tc.i和P+T+id.P和T

8、設(shè)文法為:S->SA|A

A-a|b

則對句子aba,下面—是規(guī)范推導(dǎo)。

a.SSASAAAAAaAAabAaba

b.SSASAAAAAAAaAbaaba

c.SSASAASAaSbaAbaaba

d.SSASaSAaSbaAbaaba

9、文法G:S^b|A(T)

T-T,S|S

貝!]FIRSTVT(T)。

a.{b,A,(}b.{b,A,)}c.{b,A,(?}d.{b,A,)?)

10、產(chǎn)生正規(guī)語言的文法為—O

a.0型b.1型c.2型d.3型

11、采用自上而下分析,必須—o

a.消除左遞歸b.消除右遞歸c.消除回溯d.提取公共

左因子

12、在規(guī)范歸約中,用—來刻畫可歸約串。

a.直接短語b.句柄c.最左素短語d.素短語

13、有文法G:E-E*T|T

T->T+i|i

句子1+2*8+6按該文法G歸約,其值為o

a.23B.42c.30d.17

14、規(guī)范歸約指o

a.最左推導(dǎo)的逆過程b.最右推導(dǎo)的逆過程

C.規(guī)范推導(dǎo)d.最左歸約的逆過程

[解答]

1、選Co

2、選a。

3、選Co

4、雖然a與b沒有優(yōu)先關(guān)系,但構(gòu)造優(yōu)先函數(shù)后,a與b就一定存在優(yōu)先

關(guān)系了。所以,由f(a)>g)(b)或f(a)<g(b)并不能判定原來的a與b之間是否

存在優(yōu)先關(guān)系:故選c。

5、如果文法G無二義性,則最左推導(dǎo)是先生長右邊的枝葉:對于d,如果

有兩個不同的是了左推導(dǎo),則必然有二義性。故選a。

6、選Co

7、由圖2-8-1的語法樹和優(yōu)先關(guān)系可以看出應(yīng)選b。

A

㈤\+山

E+TP

Ti

8、規(guī)范推導(dǎo)是最左推導(dǎo),故選d。

9、由T—T,…和Tt(…得FIRSTVT(T))={(?)};

由T—S得FIRSTVT(S)cFIRSTVT(T),而FIRSTVT(S)={b,A,(};即

FIRSTVT(T)={b,A,(?};因此選c。

10、d11、c12、b13、b14、b

二、多項(xiàng)選擇題

1、下面哪些說法是錯誤的—O

a.有向圖是一個狀態(tài)轉(zhuǎn)換圖b.狀態(tài)轉(zhuǎn)換圖是一個有向圖

c.有向圖是一個DFAd.DFA可以用狀態(tài)轉(zhuǎn)換圖表示

2、對無二義性文法來說,一棵語法樹往往代表了—o

a.多種推導(dǎo)過程b.多種最左推導(dǎo)過程c.一種最左推導(dǎo)過程

d.僅一種推導(dǎo)過程e.一種最左推導(dǎo)過程

3、如果文法G存在一個句子,滿足下列條件—之一時,則稱該文法是

二義文法。

a.該句子的最左推導(dǎo)與最右推導(dǎo)相同

b.該句子有兩個不同的最左推導(dǎo)

c.該句子有兩棵不同的最右推導(dǎo)

d.該句子有兩棵不同的語法樹

e.該句子的語法樹只有一個

4、有一文法G:S-AB

A-aAb|£

B-^cBd|£

它不產(chǎn)生下面一集合。

a.{anbmcndni|n,rn>0}b.{anbncmdm|n,rn>0}

c.{anbmcmdn|n,rn>0}d.{anbncmdm|n,rn>0}

e.{anbncndn|n>0}

5、自下而上的語法分析中,應(yīng)從開始分析。

a.句型b.句子c.以單詞為單位的程序

d.文法的開始符e.句柄

6、對正規(guī)文法描述的語言,以下—有能力描述它。

a.0型文法b.l型文法c.上下文無關(guān)文法d.右線性文法e.

左線性文法

解答1、e、a、c2、a、c、e3、b、c、d4、a、c5、b、c6、a、

b、c>d、e

三、填空題

1、文法中的終結(jié)符和非終結(jié)符的交集是—0詞法分析器交給語法分析器

的文法符號一定是—,它一定只出現(xiàn)在產(chǎn)生式的一部。

2、最左推導(dǎo)是指每次都對句型中的—非終結(jié)符進(jìn)行擴(kuò)展。

3、在語法分析中,最常見的兩種方法一定是—分析法,另一是—分析

法。

4、采用一語法分析時,必須消除文法的左遞歸。

5、樹代表推導(dǎo)過程,樹代表歸約過程。

6、自下而上分析法采用一、歸約、錯誤處理、等四種操作。

7、Chomsky把文法分為種類型,編譯器構(gòu)造中采用和文

法,它們分別產(chǎn)生和語言,并分別用和自動機(jī)識別

所產(chǎn)生的語言。

解答1、空集終結(jié)符右

2、最左

3、自上而上自下而上

4、自上而上

5、語法分析

6、移進(jìn)接受

7、42型3型上下文無關(guān)語言正規(guī)語言下推自動機(jī)

有限

四、判斷題

1、文法S—aS|bR|£描述的語言是(a|bc)*()

R—cS

2、在自下而上的語法分析中,語法樹與分析樹一定相同。

()

3、二義文法不是上下文無關(guān)文法。()

4、語法分析時必須先消除文法中的左遞歸。()

5、規(guī)范歸約和規(guī)范推導(dǎo)是互逆的兩個過程。()

6、一個文法所有句型的集合形成該文法所能接受的語言。

()

解答1、對2、錯3、錯4、錯5、錯6、錯

五、簡答題

1、句柄2、素短語3、語法樹4、歸約5、推導(dǎo)

[解答]

1、句柄:一個句型的最左直接短語稱為該句型的句柄。

2、素短語:至少含有一個終結(jié)符的素短語,并且除它自身之外不再含任何

更小的素短語。

3、語法樹:滿足下面4個條件的樹稱之為文法G[S]的一棵語法樹。

①每一終結(jié)均有一標(biāo)記,此標(biāo)記為VNUVT中的一個符號;

②樹的根結(jié)點(diǎn)以文法G[S]的開始符S標(biāo)記;

③若一結(jié)點(diǎn)至少有一個直接后繼,則此結(jié)點(diǎn)上的標(biāo)記為VN中的一個符

號;

④若一個以A為標(biāo)記的結(jié)點(diǎn)有K個直接后繼,且按從左至右的順序,

這些結(jié)點(diǎn)的標(biāo)記分別為Xi,X2,-,XK,則A一Xi,X2,…,XK,必然是G

的一個產(chǎn)生式。

4、歸約:我們稱ayB直接歸約出aAB,僅當(dāng)A-y是一個產(chǎn)生式,

且a、B£(VNUVT)*。歸約過程就是從輸入串開始,反復(fù)用產(chǎn)生式右

部的符號替換成產(chǎn)生式左部符號,直至文法開始符。

5、推導(dǎo):我們稱aAB直接推出a丫8,即aASayB,僅當(dāng)A—

Y是一個產(chǎn)生式,且a、B£(VNUVT)*。如果aia2…an,則

我們稱這個序列是從a1至a2的一個推導(dǎo)。若存在一個從a1a的推導(dǎo),

則稱a1可推導(dǎo)出a。。推導(dǎo)是歸約的逆過程。

六、問答題

1、給出上下文無關(guān)文法的定義。

[解答]

一個上下文無關(guān)文法G是一個四元式(VT,VN,S,P),其中:

?VT是一個非空有限集,它的每個元素稱為終結(jié)符號;

?VN是一個非空有限集,它的每個元素稱為非終結(jié)符號,VTCIVN=①;

?S是一個非終結(jié)符號,稱為開始符號;

?P是一個產(chǎn)生式集合(有限),每個產(chǎn)生式的形式是P-a,其中,PGVN,

aG(VTUVNFO開始符號S至少必須在某個產(chǎn)生式的左部出現(xiàn)一次。

2、文法G[S]:

S->aSPQ|abQ

QP—PQ

bP—bb

bQ—be

cQ—?cc

(1)它是Chomsky哪一型文法?

(2)它生成的語言是什么?

[解答]

(1)由于產(chǎn)生式左部存在終結(jié)符號,且所有產(chǎn)生式左部符號的長度均

小于等于產(chǎn)生式右部的符號長度,所以文法G[S]是Chomskyl型文法,即

上下文有關(guān)文法。

(2)按產(chǎn)生式出現(xiàn)的順序規(guī)定優(yōu)先級由高到低(否則無法推出句子),我

們可以得到:

SabQabc

SaSPQaabQPQaabPQQaabbQQaabbcQaabbcc

SaSPQaaSPQPQaaabQPQPQaaabPQQPQaaabPQPQQaaaP

PQQQ

aaabbPqqqaaabbQQQaaabbbcQQaaabbbccQaaabbbccc

于是得到文法G[S]生成的語言L={anbncn|n>l}

3、按指定類型,給出語言的文法。

L={aWU>i21}的上下文無關(guān)文法。

【解答】

(1)由L={aHU>i》l}知,所求該語言對應(yīng)的上下文無關(guān)文法首先應(yīng)有S

faSb型產(chǎn)生式,以保證b的個數(shù)不少于a的個數(shù);其次,還需有S-Sb

或S->bS型的產(chǎn)生式,用以保證b的個數(shù)多于a的個數(shù);也即所求上下文

無關(guān)文法G[S]為:

G[S]:S-*aSb|Sb|b

4、有文法G:S-*aAcB|Bd

A~*AaB|c

B-*bScA|b

(1)試求句型aAaBcbbdcc和aAcbBdcc的句柄;

(2)寫出句子acabcbbdcc的最左推導(dǎo)過程。

【解答】(1)分別畫出對應(yīng)兩句型的語法樹,如圖2-8-2所示

句柄:AaBBd

a

圖2-8-2語法樹

(2)句子acabcbbdcc的最左推導(dǎo)如下:

SaAcBaAaBcBacaBcBacabcBacabcbScAacabcbBdcA

acabcbbdcAacabcbbdcc

5、對于文法G[S]:

S—(L)|aS|aL-L,S|S

(1)畫出句型(S,(a))的語法樹。(2)寫出上述句型的所有短語、直接

短語、句柄和素短語。

【解答】/八

(1)句型(S,(a))的語法樹如圖2號便聲

/1\

L,0

S(L)1

(2)由圖2-8-3可知:

①短語:S、a、(a)、S,(a)>(S,(a));

②直接短語:a、S;

③句柄:s;

④素短語:素短語可由圖2-8-3中相鄰終結(jié)符之間的優(yōu)先關(guān)系求得,即;

<<<<>>>

II//、、“

因此素短語為ao

6、考慮文法G[T]:

T—T*F|F

F—FtP|P

P-(T)|i

證明T*Pf(T*F)是該文法的一個句型,并指出直接多的句柄。

【解答】T*F/4

一I/1\

首先構(gòu)造T*Pt(T*F)的語法樹如圖2-8-4所示。/|\

由圖2-8-4可知,T*Pt(T*F)是文法G[T]的)一個旬型今

直接短語有兩個,即P和T*F;句柄為P。

一、單項(xiàng)選擇題

1、詞法分析所依據(jù)的是—o

a.語義規(guī)則b.構(gòu)詞規(guī)則c.語法規(guī)則d.等價變換規(guī)則

2、詞法分析器的輸出結(jié)果是—o

a.單詞的種別編碼b.單詞在符號表中的位置

C.單詞的種別編碼和自身值d.單詞自身值

3、正規(guī)式Mi和M2等價是指―。

a.Mi和M2的狀態(tài)數(shù)相等b.Mi和M2的有向弧條數(shù)相等

c.Mi和M2所識別的語言集相等d.Mi和M2狀態(tài)數(shù)和有向弧條數(shù)相等

4、狀態(tài)轉(zhuǎn)換圖(見圖3-6-1)接受的字集為—o

a.以0開頭的二進(jìn)制數(shù)組成的集合b.以0結(jié)尾的二進(jìn)制數(shù)組成的集

C.含奇數(shù)個0的二進(jìn)制數(shù)組成的集合d.含偶數(shù)個0的二進(jìn)制數(shù)組成的

集合

5、詞法分析器作為獨(dú)立的階段使整個編譯程序結(jié)構(gòu)更加簡潔、明確,因

此,0

a.詞法分析器應(yīng)作為獨(dú)立的一遍b.詞法分析器作為

子程序較好

c.詞法分析器分解為多個過程,由語法分析器選擇使用d.詞法分析器并

不作為一個獨(dú)立的階段

解答1、b2、c3、c4、d5、b

二、多項(xiàng)選擇題

1、在詞法分析中,能識別出—O

a.基本字b.四元式c.運(yùn)算符

d.逆波蘭式e.常數(shù)

2、令E={a,b},則X上所有以b開頭,后跟若干個ab的字的全體對應(yīng)的正

規(guī)式為—。

a.b(ab)*b.b(ab)+c.(ba)*b

d.(ba)+be.b(a|b)

解答1、a>c>e2、a、b>d

三、填空題

1、確定有限自動機(jī)DFA是的一個特例。

2、若二個正規(guī)式所表示的—相同,則認(rèn)為二者是等價的。

3、一個字集是正規(guī)的,當(dāng)且僅當(dāng)它可由所<,

解答1、NFA2、正規(guī)集3、DFA(NFA)所識別

四、判斷題

1、一個有限狀態(tài)自動機(jī)中,有且僅有一個唯一終態(tài)。

()

2、設(shè)r和s分別是正規(guī)式,則有L(r|s)=L(r)|L(s)o

()

3、自動機(jī)M和M'的狀態(tài)數(shù)不同,則二者必不等價。

()

4、確定的自動機(jī)以及不確定的自動機(jī)都能正確地識別正規(guī)集。

()

5、對任意一個右線性文法G,都存在一個NFAM,滿足L(G)=L(M)O

()

6、對任意一個右線性文法G,都存在一個DFAM,滿足L(G)=L(M)O

()

7、對任何正規(guī)表達(dá)式e,都存在一個NFAM,滿足L(G)=L(e)。

()

8、對任何正規(guī)表達(dá)式e,都存在一個DFAM,滿足L(G)=L(e)。

()

解答1、2、3、錯4、5、6、7、8、正確

五、基本題

1、設(shè)乂=({x,y},{a,b},f,x,{y})為一非確定的有限自動機(jī),其中f定義如

下:

f(x,a)={x,y}f(x,b)={y}

f(y,a)=6f(y,b)={x,y}

試構(gòu)造相應(yīng)的確定有限自動機(jī)M'。

解答:對照自動機(jī)的定義M=(S2,f,So,Z),由f的定義可知f(x,a)、f(y,b)均

為多值函數(shù),所以是一非確定有限自動機(jī),先畫出NFAM相應(yīng)的狀態(tài)圖,

如圖3-6-2所示。

用子集法構(gòu)造狀態(tài)轉(zhuǎn)換矩陣表3-6-3所示。

IlaIb

{X}{x,y}{y}

{y}——{x,y}

{X,y}{x,y}{x,y}

將轉(zhuǎn)換矩陣中的所有子集重新命名而形成表3-6-4所示的狀態(tài)轉(zhuǎn)換矩陣。

表3-6-4狀態(tài)轉(zhuǎn)換矩陣

ab

021

1——2

222

即得到M,=({0,1,2},{a,b},f,0,{1,2}),其

狀態(tài)轉(zhuǎn)換圖如圖3-6-5所示。

將圖3-6-5的DFAM,最小化。首先,將M,的狀態(tài)分成終態(tài)組{1,2}與非終

態(tài)組{0};其次,考察{1,2}。由于{l,2}a={l,2}b={2}u{l,2},所以不再將其

劃分了,也即整個劃優(yōu)態(tài)1代表{1,2},即把原來

到達(dá)2的弧都導(dǎo)向1,I圖3-6-6所示化簡DFAM'

2、對給定正規(guī)式b*(d|ad)(b|ab)+,構(gòu)造其NFAM;

解答:首先用A+=AA*改造正規(guī)式得:b(d|ad)(b|ab)(b|ab)*;其次,構(gòu)造該

*/II1\Z1

正規(guī)式的NFAM,-6-7所不

IA/1c/rAAxTLAR”

1、構(gòu)造下面文法的LL(1)分析表。

D—TL

T—>int|real

L-idR

R—,idR|£

解答:LL(1)分析表見表4-3-1

分析雖然這個文法很簡單,我們還是從求開始符號集合和后繼符號集合開

始。

FIRST(D)=FIRST(T)={int,real}FOLLOW(D)=FOLLOW

(L)={#}

FIRST(L)={id}FOLLOW(T)={id}

FIRST(R)={,,£}FOLLOW(R)={#}

有了上面每個非終結(jié)符的FIRST集合,填分析表時要計算一個產(chǎn)生式右部

a的FIRST(a)就不是件難事了。

填表時唯一要小心的時,£是產(chǎn)生式R-*£右部的一個開始符號,而#在

FOLLOW(R)中,所以填在輸入符號#的欄目中。

表4-3-1LL(1)分析表

非終結(jié)符輸入符號

intrealid#

DDTLDfTL

TT-*intT-*real

LL-*idR

RR—,idRRf£

2、下面文法G[S]是否為LL(1)文法?說明理由。

SAB|PQxA-*xyBbc

P-*dP|sQ->aQ|s

解答:該文法不是LL(1)文法,見下面分析中的說明。

分析只有三個非終結(jié)符有兩個選擇。

1、P的兩個右部dP和£的開始符號肯定不相交。

2、Q的兩個右部aQ和£的開始符號肯定不相交。

3、對S來說,由于xeFIRST(AB),同時也有xGFIRST(PQx)(因?yàn)?/p>

P和Q都可能為空)。所以該文法不是LL(1)文法。

3、設(shè)有以下文法:

G[S]:S^aAbDe|d

A-*BSD|e

B-*SAc|cD|E

D->Se|E

(1)求出該文法的每一個非終結(jié)符U的FOLLOW集。

(2)該文法是LL(1)文法嗎?

(3)構(gòu)造C[S]的LL(1)分析表。

解答:(1)求文法的每一個非終結(jié)符U的FOLLOW集的過程如下:

因?yàn)椋?/p>

①S是識別符號,且有AfBSD、B—SAc、D-Se,所以FOLLOW(S)

應(yīng)包含

FIRST(D)UFIRST(Ac)UFIRST(e)U{#}

={a,d}U{a,d,c,e}U{e}U{#}

={a,c,d,e#}

②又因?yàn)锳fBSD和D->£,所以FOLLOW中還包含F(xiàn)OLLOW(A)o

因?yàn)镾—aAbDe和BfSAc,所以

FOLLOW(A)=FIRST(bDe)UFIRST(c)={b,c}

綜合①、②得FOLLOW(S)={a,d,c,e,#)U{a,b,c,d,e,#}

因?yàn)锳—BSD,所以FOLLOW(B)=FIRST(SD)={a,d}

因?yàn)镾faAbDe|d、AfBSD|e和BfSAc|cD,所以

FOLLOW(D)=FIRST(e)UFOLLOW(A)UFOLLOW(B)

={e}U{b,c}U{a,d}={a,b,c,d,e)

(2)G[S]不是LL(1)文法。

因?yàn)楫a(chǎn)生式BfSAc|cD|e中

FIRST(SAc)ClFOLLOW(B)={a,d}W0

(3)構(gòu)造G[S]的LL(1)分析表。

按照LL(1)分析表的構(gòu)造算法構(gòu)造方法G[S]的LL(1)分析表如表4-3-2

所示。

表4-3-2G[S]的LL(1)分析表

abcde#

saAbDed

ABSDBSDBSDe

BSac/ecDSac/e

DSe/eeeSe/ee

4、將文法G[V]改造成為LL(1)的。

G[V]:V^N|N[E]

E—V|V+E

N-*i

解答:對文法G[V]提取公共左因子后得到文法:

Gr[V]:V-*NA

Afe|[E]

E-*VB

B-e|+E

N->i

求出文法GTV]中每一個非終結(jié)符號的FIRST集:

FIRST(V)={i}FIRST(A)={[,e}

FIRST(E)={i}FIRST(B)={+,e}

FIRST(N)={i}

求出文法GTV]中每一個非終結(jié)符號的FOLLOW集:

FOLLOW(V)={#}UFIRST(B)\{e}UFOLLOW(E)={#,+,]}

FOLLOW(A)=FOLLOW(V)={+?#}

FOLLOW(E)=FIRST(])\{e}UFOLLOW(B)=FIRST(])\{e}U

FOLLOW(E)={]}

FOLLOW(B)=FOLLOW(E)={]}

FOLLOW(N)=FIRST(A)\{e}UFOLLOW(V)={[,],+,#}

可以看到,對文法G'[V]的產(chǎn)生式Af£|[E],有

FIRST([E])AFOLLOW(A)={[}A{+,],#}=0

對產(chǎn)生式Bf£|+E,有

FIRST(+E)nFOLLOW(B)={+}n{]}=0

而文法的其他產(chǎn)生式都只有一個不為£的右部,所以文法G'[V]是LL(1)

文法。

5、已知文法:

G[A]:A-*aAa|e

(1)該文法是LL(1)文法嗎?為什么?

(2)若采用LL(1)方法進(jìn)行語法分析,如何得到該文法的LL(1)分析

表?

(3)若輸入符號串“aaaa”,請給出語法分析過程。

解答:(1)因?yàn)楫a(chǎn)生式A—aAa|£有空產(chǎn)生式右部,而

FOLLOW(A)={#}UFIRST(a)={a,#}

造成FIRST(A)nFOLLOW(A)={A,e}n{a,#}W0

所以該文法不是LL(1)文法。

(2)若采用LL(1)方法進(jìn)行語法分析,必須修改該文法。

因該文法產(chǎn)生偶數(shù)(可以為0)個a,所以得到文法

G'[A]:A-aaA|£

此時對產(chǎn)生式AfaaA|£,有FOLLOW(A)={#}UFOLLOW(A)={#},因

FIRST(A)ClFOLLOW(A)={a,e}D{#}=0

所以文法G'[A]是LL(1)文法,按LL(1)分析表構(gòu)造算法構(gòu)造該文法

的LL(1)分析表如表4-3-3所示。

表4-3-3文法G'[A]的LL(1)分析表

A#

AA-*aaAA->£

(3)若采用LL(1)方法進(jìn)行語法分析,對符號串“aaaa”的分析過程如表

4-3-4所示。

表434對符號串“aaaa”的分析過程

步驟分析棧輸入串產(chǎn)生式/動作

1#Aaaaa#A-*aaA

2#Aaaaaaa#匹配

3#Aaaaa#匹配

4#Aaa#A-*aaA

5#Aaaaa#匹配

6#Aaa#匹配

7#A#A-*e

8##接受

第七節(jié)習(xí)題

設(shè)有文法G[S]為:

S-*a|b|(A)

A^SdA|S

(i)完成下列算符優(yōu)先關(guān)系表,見表5-7-1,并判斷G[S]是否

為算符優(yōu)先文法。

表5-7-1算符優(yōu)先關(guān)系表

ab()d#

a>>

b>>

<<<

(3X:

)>>

d

#<<<3E

(2)給出句型(SdSdS)的短語、簡單短語、句柄、素短語和最左素短語。

(3)給出輸入串(adb)#的分析過程。

解答:

(1)先求文法G[S]的FIRSTVT集和LASTVT集:

由Sfa|b|(A)得:FIRSTVT(S)={a,b,();

由A—Sd…得:FIRSTVT(A)=17h8f8a;又由A—S…得:FIRSTVT(S)u

FIRSTVT(A),即FIRSTVT(A)={d,a,b,(};

由Sfa|b|(A)得;LASTVT(S)={a,b,});

由A-…dA得:LASTVT(A)=p22f33b,又由AfS得:LASTVT(S)u

LASTVT(A),即LASTVT(A)={d,a,b,)}o

構(gòu)造優(yōu)先關(guān)系表方法如下:

①對Pf…air、或P->…aQb…,有a=b;

②對Pf,aR…,IfobGFIRSTVT(R),有a?b;

③對p-...Rb…,WaGFIRSTVT(R),有a?b。

由此得到:

①由S-(A)得:(=);

②由S-(A…得:(《FIRSTVT(A),即:(《d,(?a,(?瓦(《(;由A-*???dA得:

d<FIRSTVT(A),

即:d<d,d<a,d<b,d<(;

(3)由S-A)得,LASTVT(A)A),即:d>),a>),b>),)>);SA-*Sd-M:

LASTVT(S)>d,即:a>d,b>d,)>d;

此外,由#S#得:#=#;

由#?FIRSTVT(S)得:#<a,#<b,#<(;脂由LASTVT(S)>#W:d>#,a>#,b>#,)>

#o

最后得到算符優(yōu)先關(guān)系表,見表5-7-2o

表5-7-2算符優(yōu)先關(guān)系表

ab()d#

a>>>

b>>>

(<<<3X:

)>>>

d<<<><>

#<<<3E

由表5-7-2可以看出,任何兩個終結(jié)符之間至少只滿足工、《、》三種優(yōu)先關(guān)

系之一,故G[S]為算符優(yōu)先文法。

(2)為求出句型(SdSdS)的短語、簡單短語、句柄,我們先畫出該句型

對應(yīng)的語法樹,如圖5-7-3所示。由圖5-7-3得到

短語:S,SdS,SdSdS,(SdSdS)

簡單短語(即直接短語):S'/T\、

句柄(即最左直接短語):Sc.

素短語:SdS,它同時也是該句型的最左素短語。

IAzIlrc/~~II/r\inic、AA

(3)輸入串(adb)#的分析過程見表5-7-4

表574輸入串(adb)#的分析過程

符號棧輸入串說明

#(adb)#移進(jìn)

#(adb)#移進(jìn)

#(adb)#用S-a歸約

#(Sdb)#移進(jìn)

#(Sdb)#移進(jìn)

#(Sdb)#用S—b歸約

#(SdS)#用A—S歸約

#(SdA)#用A—SdA歸約

#(A)#移進(jìn)

#(A)#用S一(A)歸約

#S#分析成功

第四節(jié)習(xí)題

一、單項(xiàng)選擇題

1、若a為終結(jié)符,則A-a-ap為一項(xiàng)目

a.歸約b.移進(jìn)c.接受d.待約

2、若項(xiàng)目集限含有A-a?,則在狀態(tài)k時,僅當(dāng)面臨的輸入符號aG

FOLLOW(A)時,才采取“Afa?”動作的一定是。

a.LALR文法b.LR(0)文法c.LR(1)文法d.SLR(1)文法

3、就文法的描述能力來說,有—o

a.SLR(1)cLR(0)b.LR(1)cLR(0)c.SLR(1)cLR(1)

d.無二義文法uLR(1)

4、在LR(0)的ACTION子表中,如果某一行中存在標(biāo)記“r」的欄,則。

a.該行必定填滿rjb.該行未填滿rj

C.其他行也有Fjd.goto子表中也有Fj

5、一個指明了在分析過程中的某時刻所能看到產(chǎn)生式多大一部

分。

a.活前綴b.前綴c.項(xiàng)目d.項(xiàng)目集

解答:

1、Afa?稱為歸約項(xiàng)目,對文法開始符的歸約項(xiàng)目,如?稱

為接受項(xiàng)目,A—a?a0(a為終結(jié)符)稱為移進(jìn)項(xiàng)目。在此選b.

2、當(dāng)用產(chǎn)生式A-a歸約時,LR(0)無論面臨什么輸入符號都進(jìn)行歸約;

SLR(1)則僅當(dāng)面臨的輸入符號a£FOLLOW(A)時進(jìn)行歸約;LR(1)

則當(dāng)在把?歸約為A的規(guī)范句型的前綴pAa前提下,當(dāng)a后跟終結(jié)符a時,

才進(jìn)行歸約;因此選d。

3、由于LR(0)cSLR(1)uLR(1)u無二義文法,故選c。

4、選a。

5、選Co

二、多項(xiàng)選擇題

1、一個LR分析器包括—o

a.一個總控程序b.一個項(xiàng)目集c一個活前綴

d.一張分析表e.一個分析棧

2、LR分析器核心部分是一張分析表,該表包括等子表。

a.LL(l)分析b.優(yōu)先關(guān)系C.GOTO

d.LRe.ACTION

3、每一項(xiàng)ACTION^,a]所規(guī)定的動作包括。

a.移進(jìn)b.比較c.接受d.歸約e.報錯

4、對LR分析表的構(gòu)造,有可能存在—動作沖突。

a.移進(jìn)b.歸約c.移進(jìn)/歸約d.移進(jìn)/移進(jìn)e.歸約/歸約

5、就文法的描述能力來說,有—o

a.SLR(1)cLR(1)b.LR(1)cSLR(1)c.LR(0)cLR

(1)

d.LR(1)u無二義文法e.SLR(1)u無二義文法

6、對LR分析器來說,存在一等分析表的構(gòu)造方法。

a.LALRb.LR(0)e.SLR(1)d.SLR(0)e.LR(1)

7、自上而下的語法分析方法有o

a.算符優(yōu)先分析法b.LL(1)分析法c.SLR(1)分析

d.LR(0)分析法e.LALR(1)分析法

解答:

1、一個LR分析器包括一個總控程序和一張分析表,選a、do

2、選c、e。

3、選a、c>d、e。

4、在LR分析表的構(gòu)造中有可能存在“移進(jìn)”/“歸約”和“歸約”/“歸

約”沖突;故選c、e。

5、選a、b、c、d>e0

6、選a、b、c、eo

7、a、c>d、e°

三、填空題

1、對于一個文法,如果能夠構(gòu)造—。使得它的—均是唯一確定的,則

稱該文法為LR文法。

2、字的前綴是指該字的—o

3、活前綴是指—的一個前綴,這種前綴不含—之后的任何符號。

4、在LR分析過程中,只要—的已掃描部分保持可歸約成一個—,則掃

描過的部分正確。

5、將識別的NFA確定化,使其成為以為狀態(tài)的DFA,這個DFA

就是建立—的基礎(chǔ)。

6、A->a?稱為項(xiàng)目;對文法開始符S,->a?為項(xiàng)目;若a為終結(jié)

符,則稱為項(xiàng)目;若B為非終結(jié)符,則稱Afa?a0為項(xiàng)

目。

7、LR(0)分析法的名字中“L”表示,“R”表示,

“0”表示O

解答:

1、一張分析表每個入口

2、任意首部

3、規(guī)范句型句柄

4、輸入串活前綴

5、活前綴項(xiàng)目集合LR分析算法

6、歸約接受移進(jìn)待約

7、自左至右分析采用最右推導(dǎo)的逆過程即最左歸約向右查看0個字符

四、綜合題

1、對于文法G[S]:S->AS|b

A一SA|a

(1)列出所有LR(0)項(xiàng)目

(2)列出構(gòu)成文法LR(0)項(xiàng)目集規(guī)范族。

解答:

首先將文法G拓廣為G[S1:

S'-S

S->AS|b

A->SA|a

(1)文法G[S,]的LR(0)項(xiàng)目是:

1、?s5、S-AS?9、AfS?A

2、ST?6、Sf-b10、AfSA?

3、S->?AS7、S->b?11、A-*,a

4、S-A?S8、A-**SA12、A-*a?

2、列出構(gòu)成文法LR(0)項(xiàng)目集規(guī)范族。

用&CLOSURE(閉包)辦法構(gòu)造文法G,的LR(0)項(xiàng)目集規(guī)范族如下:

Io:1、SJ?SI3:9、A->S?AI6:12、Afa?

3、S->?AS8、Af?SAI7:7、S-*b?

8、A-**SA3、S->?AS

11、A->*a6、S—?b

6、S-*?b11>Af,a

Ii:2、ST-I4:10、A-*SA?

9、A-*S?A4、S—A?S

8、Af?SA3、S-*?AS

11>Af?a6、S->?b

3、S—?AS8、A—?SA

6、S->?b11、A—,a

I2:4、S-*A?SIs:5、S—AS?

3、S-**AS9、A—S?A

6、S->?b8、A-**SA

8、A—?SA11、A-**a

11、Af,a3、S—?AS

6、Sf,b

注意:11中的卜-S?和Af?SA是由狀態(tài)Io中的1和3讀入一個S字符

后得到的下一個項(xiàng)目;,而14中的A->SA和A-*A?S則是由L中的9和3

讀入一個A字符后得到的下一個項(xiàng)目;15中的SfAS?和A-S?A則是

由14中的4和8讀入一個S字符后得到的下一個項(xiàng)目。

狀態(tài)全體構(gòu)成了文法G,的LR(0)規(guī)范族。

第八節(jié)習(xí)題

一、單項(xiàng)選擇題

1、中間代碼生成所依據(jù)的是—。

a.語法規(guī)則b.詞法規(guī)則c.語義規(guī)則d.等價變換規(guī)則

2、四元式之間的聯(lián)系是通過—實(shí)現(xiàn)的。

a.指示器b.臨時變量c.符號表d.程序變量

3、后綴式ab+cd+/可用表達(dá)式來表示。

a.a+b/c+db.(a+b)/(c+d)c.a+b/(c+d)d.a+b+c/d

4、表達(dá)式(-|AVB)A(CVD)的逆波蘭表示為—o

a.iABVACDVb.AnBVCDVA

c.ABVTCDVAd.AqBVACDV

5、中間代碼的樹型表示所對應(yīng)的表達(dá)式為—o

a.A+B+C+Db.A+(B+C)+Dc.(A+B)+C+Dd.(A+B)+(C+D)

6、四元式表示法的優(yōu)點(diǎn)為—。

a.不便于優(yōu)化處理,但便于表的更動b.不便于優(yōu)化處理,但節(jié)省存儲空間

c.便于優(yōu)化處理,也便于表的更動d.便于表的更動,也節(jié)省存儲空間

7、終結(jié)符具有—屬性。

a.傳遞b.繼承c.抽象d.綜合

解答

1、選Co

2、四元式之間的聯(lián)系是通過臨時變量實(shí)現(xiàn)的,故選b。

3、選b。

4、選bo

5、選do

6、四元式表示法的優(yōu)點(diǎn)與間接三元式相同,故選c。

7、選d。

二、多頂選擇題

1、中間代碼主要有一。

a.四元式b.二元式c.三元式d.后綴式e.間

接三元式

2、下面中間代碼形式中,能正確表示算術(shù)表達(dá)式a+b+c的有—o

AA

a.ab+c+b.abc++c./\d.,e.a+b+c

+ca4'

3、在下面的—語法制導(dǎo)翻譯中,采用拉鏈-回填技術(shù)。

a.賦值語句b.goto語句c.條件語句d.循環(huán)語句

4、下列中間代碼形式有益于優(yōu)化處理。

a.三元式b.四元式c.間接三元式d.逆波蘭表示法

e.樹形表示法

5、在編譯程序中安排中間代碼生成的目的是o

a.便于進(jìn)行存儲空間的組織b.利于目標(biāo)代碼的優(yōu)化

c.利于編譯程序的移植d.利于目標(biāo)代碼的移植

e.利于提高目標(biāo)代碼的質(zhì)量

6、下面的中間代碼形式中,能正確表示算術(shù)表達(dá)式a+b*c。題)

AA

a.ab+c*b.abc*+c.a+b*/'cd.a

7、三地址代碼語句具體實(shí)現(xiàn)通常有表示方法。

a.逆波蘭表示b.三元式c.間接三元式d.樹形表示e.四

元式

解答

1、選a、c>d>eo

2、b、d的中間代碼不能正確表示a+b+c,而e不是中間代碼:故選a、co

3、凡涉及到跳轉(zhuǎn)的語句都需要采用拉鏈一一回填技術(shù),故選b、c、do

4、選b、Co

5、選b、do

6、選b、e。

7、選b、c、eo

三、填空題

1、中間代碼有等形式,生成中間代碼主要是為了

使0

2、語法制導(dǎo)翻譯既可以用來產(chǎn)生代碼,也可以用來產(chǎn)生指令,

甚至可用來對輸入串進(jìn)行o

3、當(dāng)源程序中的標(biāo)號出現(xiàn)“先引用后定義”時,中間代碼的轉(zhuǎn)移地址須持

時才能確定,因而要進(jìn)行o

4、文法符號的屬性有兩種,一種稱為,另一種稱為o

5、后綴式abc-/所代表的表達(dá)式是,表達(dá)式(a-b)*c可用后綴式

表示。6、用一張輔以的辦法來表示中間代碼,這種

表示法稱為間接三元式。

解答

1、逆波蘭記號、樹形表示、三元式、四元式目標(biāo)代碼的優(yōu)化容易

實(shí)現(xiàn)

2、中間目標(biāo)解釋執(zhí)行

3、標(biāo)號定義回填

4、繼承屬性綜合屬性

5、a/(b-c)ab-c*

6、間接碼表三元式表

四、綜合題

1、給出下列表達(dá)式的逆波蘭表示(后綴式):

①a*(-b+c)

②(AVB)A(CVnDAE)

2、寫出算術(shù)表達(dá)式:A+B*(C-D)+E/(CD)tN的

①四元式序列;②三元式序列;③間接三元式序列

解答1、

①ab@c+*;

②ABVCD-iEAVA

2、

①表達(dá)式的四元式序列:②表達(dá)式的三元式序列③間接三元

式序列

⑴(-,C,D,T.)⑴(-,C

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論