[語(yǔ)言類考試復(fù)習(xí)資料大全]中級(jí)軟件設(shè)計(jì)師上午試題分類模擬7_第1頁(yè)
[語(yǔ)言類考試復(fù)習(xí)資料大全]中級(jí)軟件設(shè)計(jì)師上午試題分類模擬7_第2頁(yè)
[語(yǔ)言類考試復(fù)習(xí)資料大全]中級(jí)軟件設(shè)計(jì)師上午試題分類模擬7_第3頁(yè)
[語(yǔ)言類考試復(fù)習(xí)資料大全]中級(jí)軟件設(shè)計(jì)師上午試題分類模擬7_第4頁(yè)
[語(yǔ)言類考試復(fù)習(xí)資料大全]中級(jí)軟件設(shè)計(jì)師上午試題分類模擬7_第5頁(yè)
已閱讀5頁(yè),還剩28頁(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、書山有路勤為徑,學(xué)海無(wú)涯苦作舟。祝愿天下莘莘學(xué)子:學(xué)業(yè)有成,金榜題名!語(yǔ)言類考試復(fù)習(xí)資料大全中級(jí)軟件設(shè)計(jì)師上午試題分類模擬7中級(jí)軟件設(shè)計(jì)師上午試題分類模擬7單項(xiàng)選擇題問(wèn)題:1. 以下關(guān)于解釋程序和編譯程序的敘述中,正確的是_。A.編譯程序和解釋程序都生成源程序的目標(biāo)程序B.編譯程序和解釋程序都不生成源程序的目標(biāo)程序C.編譯程序生成源程序的目標(biāo)程序,解釋程序則不然D.編譯程序不生成源程序的目標(biāo)程序,而解釋程序反之答案:C解析 編譯程序,也稱編譯器,將源程序翻譯成目標(biāo)語(yǔ)言程序,然后在計(jì)算機(jī)上運(yùn)行目標(biāo)程序。雖然執(zhí)行效率高,但編寫出來(lái)的程序可讀性很差,且難以修改和維護(hù)。 解釋程序:也稱解釋器,它或者直

2、接解釋執(zhí)行源程序,或者將源程序翻譯成某種中間代碼后再加以執(zhí)行。 問(wèn)題:2. 以下關(guān)于傳值調(diào)用與引用調(diào)用的敘述中,正確的是_。 在傳值調(diào)用方式下,可以實(shí)現(xiàn)形參和實(shí)參間雙向傳遞數(shù)據(jù)的效果 在傳值調(diào)用方式下,實(shí)參可以是變量,也可以是常量和表達(dá)式 在引用調(diào)用方式下,可以實(shí)現(xiàn)形參和實(shí)參間雙向傳遞數(shù)據(jù)的效果 在引用調(diào)用方式下,實(shí)參可以是變量,也可以是常量和表達(dá)式 A.B.C.D.答案:C解析 傳值調(diào)用最顯著的特征是被調(diào)用的函數(shù)內(nèi)部對(duì)形參的修改不影響實(shí)參的值。傳值調(diào)用的參數(shù)傳遞和被調(diào)用函數(shù)內(nèi)對(duì)參數(shù)的使用主要按下述原則:函數(shù)定義時(shí)形參被當(dāng)作局部變量看待,在函數(shù)被調(diào)用時(shí)為形參分配存儲(chǔ)單元;調(diào)用函數(shù)前,首先計(jì)算實(shí)

3、參的值,調(diào)用時(shí)將實(shí)參的值放入形參的存儲(chǔ)單元;被調(diào)用函數(shù)內(nèi)部對(duì)形參單元中的數(shù)據(jù)進(jìn)行直接訪問(wèn)。 引用調(diào)用是將實(shí)參的地址傳遞給形參,使得形參的地址就是對(duì)應(yīng)實(shí)參的地址。引用調(diào)用的參數(shù)傳遞和被調(diào)用函數(shù)內(nèi)對(duì)參數(shù)的使用主要按下述原則處理:函數(shù)定義時(shí)形參被當(dāng)作局部變量看待,在函數(shù)被調(diào)用時(shí)為形參分配存儲(chǔ)單元;調(diào)用時(shí)將實(shí)參的地址放入形參的存儲(chǔ)單元;被調(diào)用函數(shù)內(nèi)部對(duì)形參單元中的數(shù)據(jù)(地址)進(jìn)行間接訪問(wèn)。 問(wèn)題:3. 可用于編寫?yīng)毩⒊绦蚝涂焖倌_本的語(yǔ)言是_。A.PythonB.PrologC.JavaD.C#答案:A解析 Python是一種面向?qū)ο蟮慕忉屝统绦蛟O(shè)計(jì)語(yǔ)言,可用于編寫?yīng)毩⒊绦颉⒖焖倌_本和復(fù)雜應(yīng)用的原型。P

4、ython也是一種腳本語(yǔ)言,它支持對(duì)操作系統(tǒng)底層的訪問(wèn)。 Prolog是一種邏輯型語(yǔ)言。Prolog程序是一系列事實(shí)、數(shù)據(jù)對(duì)象或事實(shí)間的具體關(guān)系和規(guī)則的集合。Prolog有很強(qiáng)的推理功能,適用于書寫自動(dòng)定理證明、專家系統(tǒng)、自然語(yǔ)言理解等問(wèn)題的程序。 Java是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,能開發(fā)應(yīng)用在Internet上且具有軟、硬件獨(dú)立性和交互能力的程序。Java可以一次編寫而到處運(yùn)行。 C#是微軟公司發(fā)布的一種面向?qū)ο蟮?、運(yùn)行于.NET Framework之上的高級(jí)程序設(shè)計(jì)語(yǔ)言。C#看起來(lái)與Java有著驚人的相似:它包括了諸如單一繼承、接口、與Java幾乎同樣的語(yǔ)法和編譯成中間代碼再運(yùn)行的過(guò)程

5、。但是c與Java有著明顯的不同,它借鑒了Delphi的一個(gè)特點(diǎn),與COM(組件對(duì)象模型)是直接集成的,而且它是微軟公司.NET Windows網(wǎng)絡(luò)框架的主角。 問(wèn)題:4. 將高級(jí)語(yǔ)言源程序翻譯成目標(biāo)程序的是_。A.解釋程序B.編譯程序C.鏈接程序D.匯編程序答案:B解析 編譯程序的功能是把某高級(jí)語(yǔ)言書寫的源程序翻譯成與之等價(jià)的目標(biāo)程序。解釋程序是另一種語(yǔ)言處理程序,在詞法、語(yǔ)法和語(yǔ)義分析方面與編譯程序的工作原理基本相同,但在運(yùn)行用戶程序時(shí),它直接執(zhí)行源程序或源程序的中間表示形式。解釋程序不產(chǎn)生源程序的目標(biāo)程序,這是它和編譯程序的主要區(qū)別。問(wèn)題:5. 在對(duì)程序語(yǔ)言進(jìn)行翻譯的過(guò)程中,常采用一些與

6、之等價(jià)的中間代碼表示形式。常用的中間代碼表示不包括_。A.樹B.后綴式C.四元式D.正則式答案:D解析 常用的中間代碼有后綴式、三元式、四元式和樹等形式。問(wèn)題:6. 函數(shù)(過(guò)程)調(diào)用時(shí),常采用傳值與傳地址兩種方式在實(shí)參和形參間傳遞信息。以下敘述中,正確的是_。A.在傳值方式下,將形參的值傳給實(shí)參,因此,形參必須是常量或變量B.在傳值方式下,將實(shí)參的值傳給形參,因此,實(shí)參必須是常量或變量C.在傳地址方式下,將形參的值傳給實(shí)參,因此,形參必須有地址D.在傳地址方式下,將實(shí)參的值傳給形參,因此,實(shí)參必須有地址答案:D解析 傳值調(diào)用是指?jìng)鬟f變量值的調(diào)用方式。在這種調(diào)用方式中,實(shí)參使用變量名或者表達(dá)式,

7、形參使用變量名。在調(diào)用時(shí),調(diào)用函數(shù)將實(shí)參值拷貝到一個(gè)副本給形參,即使形參按順序從對(duì)應(yīng)的實(shí)參中獲得值,這就相當(dāng)于將實(shí)參值對(duì)應(yīng)地賦給形參,使形參獲值。傳址調(diào)用是指在調(diào)用時(shí)傳遞變量地址值的傳值調(diào)用。傳址調(diào)用時(shí)要求調(diào)用函數(shù)的實(shí)參用地址值,而被調(diào)用函數(shù)的形參用指針,于是函數(shù)之間進(jìn)行地址值的傳遞。這種傳遞是將實(shí)參的變量地址值傳遞給形參指針,即讓形參指針指向?qū)崊⒆兞?,這種傳遞方式與調(diào)用函數(shù)拷貝實(shí)參值的副本給形參是不同的,它是讓形參指針直接指向?qū)崊⒌淖兞?。?wèn)題:7. 編譯和解釋是實(shí)現(xiàn)高級(jí)程序設(shè)計(jì)語(yǔ)言翻譯兩種基本形式。以下關(guān)于編譯與解釋的敘述中,正確的是_。A.在解釋方式下,對(duì)源程序不進(jìn)行詞法分析和語(yǔ)法分析,直

8、接進(jìn)行語(yǔ)義分析B.在解釋方式下,無(wú)需進(jìn)行詞法、語(yǔ)法和語(yǔ)義分析,而是直接產(chǎn)生源程序的目標(biāo)代碼C.在編譯方式下,必須進(jìn)行詞法、語(yǔ)法和語(yǔ)義分析,然后產(chǎn)生源程序的目標(biāo)代碼D.在編譯方式下,必須先形成源程序的中間代碼,然后再產(chǎn)生與機(jī)器對(duì)應(yīng)的目標(biāo)代碼答案:C解析 編譯程序是將高級(jí)語(yǔ)言書寫的源程序翻譯成與之等價(jià)的低級(jí)語(yǔ)言的目標(biāo)程序,編譯的工作階段包括:詞法分析、語(yǔ)法分析、語(yǔ)義分析、中間代碼生成、代碼優(yōu)化、目標(biāo)代碼生成。解釋程序直接執(zhí)行源程序或源程序的內(nèi)部形式,一般是讀一句源程序,翻譯一句,執(zhí)行一句,不產(chǎn)生目標(biāo)代碼,如BASIC解釋程序。編譯程序與解釋程序最大的區(qū)別之一在于前者生成目標(biāo)代碼,而后者不生成;此外

9、,前者產(chǎn)生的目標(biāo)代碼的執(zhí)行速度比解釋程序的執(zhí)行速度要快;后者人機(jī)交互好,適于初學(xué)者使用。問(wèn)題:8. 若C程序的表達(dá)式中引用了未賦初值的變量,則_。A.編譯時(shí)一定會(huì)報(bào)告錯(cuò)誤信息,該程序不能允許B.可以通過(guò)編譯并運(yùn)行,但運(yùn)行時(shí)一定會(huì)報(bào)告異常C.可以通過(guò)編譯,但鏈接時(shí)一定會(huì)報(bào)告錯(cuò)誤而不能運(yùn)行D.可以通過(guò)編譯并運(yùn)行,但運(yùn)行結(jié)果不一定是期望的結(jié)果答案:D解析 全局變量和靜態(tài)局部變量在定義時(shí)如果沒有初始化,編譯時(shí)會(huì)自動(dòng)初始化為0;而普通的局部變量,如果沒有初始化,則其值是一個(gè)隨機(jī)數(shù)。在C程序表達(dá)式中,只要引用的變量定義了,就可以通過(guò)編譯并運(yùn)行,但運(yùn)行結(jié)果不一定是期望的結(jié)果。 函數(shù)t、f的定義如下所示,其中

10、,a是整型全局變量。設(shè)調(diào)用函數(shù)t前a的值為5,則在函數(shù)中以傳值調(diào)用(call by value)方式調(diào)用函數(shù)f時(shí),輸出為_;在函數(shù)t中以引用調(diào)用(call by reference)方式調(diào)用函數(shù)時(shí),輸出為_。 9.A.12B.16C.20D.24答案:B10.A.12B.16C.20D.24答案:D解析 本題主要考查函數(shù)調(diào)用時(shí)參數(shù)的傳遞方式。如果采用傳值方式調(diào)用,則形參值的變化不會(huì)影響實(shí)參;而采用引用方式調(diào)用,則形參值的變化直接反映到實(shí)參。 本題中如果在函數(shù)t中采用傳值方式調(diào)用函數(shù)f,a的值傳給形參r,在函數(shù)f中,a的值變?yōu)?,r的值為10并返回賦給變量x,由于a是全局變量,退出函數(shù)f后a的值

11、依然為6,所以函數(shù)t的輸出結(jié)果為16。如果函數(shù)t采用傳值方式調(diào)用函數(shù)f,則形參r就是對(duì)實(shí)參a的引用,對(duì)r的修改就是對(duì)a的修改,在執(zhí)行a=r+1時(shí),a和r的值都變?yōu)?,執(zhí)行r=r*2,a和r的值都變?yōu)?2,并將r的值返回給x,因此函數(shù)t的輸出結(jié)果為24。 問(wèn)題:11. 傳值與傳地址是函數(shù)調(diào)用時(shí)常采用的信息傳遞方式,_。A.在傳值方式下,是將形參的值傳給實(shí)參B.在傳值方式下,形參可以是任意形式的表達(dá)式C.在傳地址方式下,是將實(shí)參的地址傳給形參D.在傳地址方式下,實(shí)參可以是任意形式的表達(dá)式答案:C解析 在傳值方式下,是將實(shí)參的值傳給形參,形參不能向?qū)嶋H參數(shù)傳遞信息;實(shí)參可以是表達(dá)式或常量,也可以是變

12、量或數(shù)組元素。 在傳地址方式下,是將實(shí)參的地址傳給形參,實(shí)參和形參都指向同一個(gè)對(duì)象,被調(diào)用函數(shù)中對(duì)形式參數(shù)的修改實(shí)際上就是對(duì)實(shí)際參數(shù)的修改,可以實(shí)現(xiàn)數(shù)據(jù)的雙向傳遞。實(shí)參必須是變量地址、數(shù)組名,不能是表達(dá)式或常量。 形參就是形式參數(shù),用一個(gè)變量來(lái)代表,不能是表達(dá)式。 問(wèn)題:12. 以下關(guān)于變量和常量的敘述中,錯(cuò)誤的是_。A.變量的取值在程序運(yùn)行過(guò)程中可以改變,常量則不行B.變量具有類型屬性,常量則沒有C.變量具有對(duì)應(yīng)的存儲(chǔ)單元,常量則沒有D.可以對(duì)變量賦值,不能對(duì)常量賦值答案:B解析 常量是在程序運(yùn)行過(guò)程中值不可以改變的數(shù)據(jù)。根據(jù)數(shù)據(jù)的組織類型的不同,可以將數(shù)據(jù)分為基本數(shù)據(jù)類型、用戶自定義數(shù)據(jù)類

13、型、構(gòu)造類型等。變量具有類型屬性,常量也有數(shù)據(jù)類型,如整數(shù)常量、字符串常量等。問(wèn)題:13. 下面C程序段中count+語(yǔ)句執(zhí)行的次數(shù)為_。 for(int i=1;i=11;i*=2) for(int j=1;j=i;j+) count+; A.15B.16C.31D.32答案:A解析 第1輪循環(huán),i=1,count+執(zhí)行1次,然后i=2;第2輪循環(huán),i=2,count+執(zhí)行2次,然后i=4;第3輪循環(huán),i=4,count+執(zhí)行4次,然后i=8;第4輪循環(huán),i=8,count+執(zhí)行8次,然后i=16,i11,不滿足循環(huán)條件,循環(huán)結(jié)束??梢杂?jì)算count+語(yǔ)句執(zhí)行的次數(shù)為1+2+4+8=15。問(wèn)

14、題:14. 程序的三種基本控制結(jié)構(gòu)是_。A.過(guò)程、子程序和程序B.順序、選擇和重復(fù)C.遞歸、堆棧和隊(duì)列D.調(diào)用、返回和跳轉(zhuǎn)答案:B解析 程序的三種基本控制結(jié)構(gòu)是順序結(jié)構(gòu)、選擇結(jié)構(gòu)和重復(fù)結(jié)構(gòu)。問(wèn)題:15. 函數(shù)調(diào)用時(shí),基本的參數(shù)傳遞方式有傳值與傳地址兩種,_。A.在傳值方式下,形參將值傳給實(shí)參B.在傳值方式下,實(shí)參不能是數(shù)組元素C.在傳地址方式下,形參和實(shí)參間可以實(shí)現(xiàn)數(shù)據(jù)的雙向傳遞D.在傳地址方式下,實(shí)參可以是任意的變量和表達(dá)式答案:C解析 首先看A選項(xiàng)。在傳值方式下,對(duì)應(yīng)的實(shí)參和形參是兩個(gè)獨(dú)立的實(shí)體,占用不同的內(nèi)存單元,調(diào)用函數(shù)時(shí),系統(tǒng)把實(shí)參值復(fù)制一份給形參,便斷開兩者的聯(lián)系,形參值的改變對(duì)實(shí)

15、參無(wú)影響。因此,“傳值”是單向的,只能由實(shí)參傳遞給形參。 B選項(xiàng),形參為傳值方式下的簡(jiǎn)單變量,實(shí)參可以是與其同類型的常量、變量、數(shù)組元素或表達(dá)式。 C選項(xiàng),在傳址方式下,函數(shù)調(diào)用時(shí),系統(tǒng)將實(shí)參的地址傳遞給形參,即這時(shí)參數(shù)傳遞的不是數(shù)據(jù)本身,而是數(shù)據(jù)在內(nèi)存中的地址。所以在被調(diào)用函數(shù)中,任何對(duì)形式參數(shù)的訪問(wèn),都被認(rèn)為是對(duì)形式參數(shù)的間接訪問(wèn)。實(shí)參與形參占用不同的存儲(chǔ)單元,傳遞方式是雙向的,形參值的改變將影響實(shí)參值。故C選項(xiàng)正確。 D選項(xiàng),形參為傳址方式時(shí),實(shí)參如果為常量或表達(dá)式,則傳址無(wú)效,相當(dāng)于傳值方式。 問(wèn)題:16. 下面關(guān)于程序語(yǔ)言的敘述,錯(cuò)誤的是_。A.腳本語(yǔ)言屬于動(dòng)態(tài)語(yǔ)言,其程序結(jié)構(gòu)可以在

16、運(yùn)行中改變B.腳本語(yǔ)言一般通過(guò)腳本引擎解釋執(zhí)行,不產(chǎn)生獨(dú)立保存的目標(biāo)程序C.PHP、JavaScript屬于靜態(tài)語(yǔ)言,其所有成分可在編譯時(shí)確定D.C#、Java語(yǔ)言屬于靜態(tài)語(yǔ)言,其所有成分可在編譯時(shí)確定答案:C解析 腳本是一種特定的描述性語(yǔ)言,是依據(jù)一定的格式編寫的可執(zhí)行文件,又稱做宏或批處理文件。腳本通??梢杂蓱?yīng)用程序臨時(shí)調(diào)用并執(zhí)行。腳本語(yǔ)言一般都是以文本形式存在,類似于一種命令。有些程序,如C、C+、Java等則必須先經(jīng)過(guò)編譯,將源代碼轉(zhuǎn)換為二進(jìn)制代碼之后才可執(zhí)行。而像Perl、JavaScript、VBScript等則不需要事先編譯,只要利用合適的解釋器便可以執(zhí)行代碼。 動(dòng)態(tài)類型語(yǔ)言是指

17、在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語(yǔ)言。也就是說(shuō),在用動(dòng)態(tài)類型的語(yǔ)言編程時(shí),永遠(yuǎn)也不用給任何變量指定數(shù)據(jù)類型,該語(yǔ)言會(huì)在你第一次賦值給變量時(shí),在內(nèi)部將數(shù)據(jù)類型記錄下來(lái),不用編譯即可運(yùn)行。Python和Ruby就是一種典型的動(dòng)態(tài)類型語(yǔ)言,其他的各種腳本語(yǔ)言如JavaScript屬于動(dòng)態(tài)類型語(yǔ)言。靜態(tài)類型語(yǔ)言的數(shù)據(jù)類型是在編譯期間檢查的,也就是說(shuō)在寫程序時(shí)要聲明所有變量的數(shù)據(jù)類型。C/C+是靜態(tài)類型語(yǔ)言的典型代表,其他的靜態(tài)類型語(yǔ)言還有C#、Java等。故錯(cuò)誤的為選項(xiàng)C。 問(wèn)題:17. 程序設(shè)計(jì)語(yǔ)言一般都提供多種循環(huán)語(yǔ)句,例如實(shí)現(xiàn)先判斷循環(huán)條件再執(zhí)行循環(huán)體的while語(yǔ)句和先執(zhí)行循環(huán)體再判斷循環(huán)條件的

18、do-while語(yǔ)句。關(guān)于這兩種循環(huán)語(yǔ)句,在不改變循環(huán)體的條件下,_是正確的。A.while語(yǔ)句的功能可由do-while語(yǔ)句實(shí)現(xiàn)B.do-while語(yǔ)句的功能可由while語(yǔ)句實(shí)現(xiàn)C.若已知循環(huán)體的次數(shù),則只能使用while語(yǔ)句D.循環(huán)條件相同時(shí),do-while語(yǔ)句的執(zhí)行效率更高答案:C問(wèn)題:18. 下列敘述中錯(cuò)誤的是_。A.面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言可支持過(guò)程化的程序設(shè)計(jì)B.給定算法的時(shí)間復(fù)雜性與實(shí)現(xiàn)該算法所采用的程序設(shè)計(jì)語(yǔ)言無(wú)關(guān)C.與匯編語(yǔ)言相比,采用腳本語(yǔ)言編程可獲得更高的運(yùn)行效率D.面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言不支持對(duì)一個(gè)對(duì)象的成員變量進(jìn)行直接訪問(wèn)答案:C問(wèn)題:19. 在對(duì)高級(jí)語(yǔ)言源程序進(jìn)行編譯

19、的過(guò)程中,為源程序中變量所分配的存儲(chǔ)單元的地址屬于_。A.邏輯地址B.物理地址C.接口地址D.線性地址答案:A解析 在編譯時(shí)產(chǎn)生的目標(biāo)文件都是從地址0開始的,在連接時(shí)將各個(gè)目標(biāo)文件進(jìn)行符號(hào)替換,這時(shí)會(huì)修改相應(yīng)的地址,最后產(chǎn)生一個(gè)從地址0開始的可執(zhí)行文件。在該可執(zhí)行文件中的地址稱為邏輯地址。問(wèn)題:20. 以下關(guān)于語(yǔ)言L=anbn|n1)的敘述中,正確的是_。A.可用正規(guī)式“aa*bb*”描述,但不能通過(guò)有限自動(dòng)機(jī)識(shí)別B.可用正規(guī)式“ambm”表示,也可用有限自動(dòng)機(jī)識(shí)別C.不能用正規(guī)式表示,但可以用有限自動(dòng)機(jī)識(shí)別D.不能用正規(guī)式表示,也不能通過(guò)有限自動(dòng)機(jī)識(shí)別答案:D解析 根據(jù)正規(guī)式和有限自動(dòng)機(jī)的規(guī)

20、范,結(jié)合題中給出的語(yǔ)言L,很明顯都無(wú)法將語(yǔ)言L表示和識(shí)別出來(lái)。 編譯過(guò)程中,對(duì)高級(jí)語(yǔ)言程序語(yǔ)句的翻譯主要考慮聲明語(yǔ)句和可執(zhí)行語(yǔ)句。對(duì)聲明語(yǔ)句,主要是將需要的信息正確地填入合理組織的_中;對(duì)可執(zhí)行語(yǔ)句,則是_。 21.A.符號(hào)表B.棧C.隊(duì)列D.樹答案:A22.A.翻譯成機(jī)器代碼并加以執(zhí)行B.轉(zhuǎn)換成語(yǔ)法樹C.翻譯成中間代碼或目標(biāo)代碼D.轉(zhuǎn)換成有限自動(dòng)機(jī)答案:C解析 編譯程序的功能是把用高級(jí)語(yǔ)言書寫的源程序翻譯成與之等價(jià)的目標(biāo)程序(匯編語(yǔ)言或機(jī)器語(yǔ)言)。編譯程序的工作過(guò)程可以分為6個(gè)階段:詞法分析、語(yǔ)法分析、語(yǔ)義分析、中間代碼生成、代碼優(yōu)化、目標(biāo)代碼生成,實(shí)際的編譯器中可能會(huì)將其中的某些階段結(jié)合在

21、一起進(jìn)行處理。各個(gè)階段邏輯上可以劃分為前端和后端兩部分。前端包括從詞法分析到中間代碼生成各個(gè)階段的工作,后端包括中間代碼優(yōu)化、目標(biāo)代碼生成與優(yōu)化等階段。這樣,以中間代碼為分水嶺,把編譯器分成了與機(jī)器有關(guān)的部分和與機(jī)器無(wú)關(guān)的部分。符號(hào)表的作用是記錄源程序中各個(gè)符號(hào)的必要信息,以輔助語(yǔ)義的正確性檢查和代碼生成,在編譯過(guò)程中需要對(duì)符號(hào)表進(jìn)行怏速有效地查找、插入、修改和刪除等操作。問(wèn)題:23. 語(yǔ)言L=ambn|m0,n1的正規(guī)表達(dá)式是_。A.aa*bb*B.a*bb*C.aa*b*D.a*b*答案:B解析 m0,am說(shuō)明可以有0個(gè)a或者多個(gè)a;n1,bn說(shuō)明至少有1個(gè)b或者多個(gè)b。a*表示由0個(gè)或者

22、多個(gè)a構(gòu)成的集合,可以表示am|m0;b*表示由0個(gè)或者多個(gè)b構(gòu)成的集合,bb*才可以表示(bn|n1。問(wèn)題:24. 算術(shù)表達(dá)式(a-b)*c+d的后綴式是_(-、+、*表示算術(shù)的減、加、乘運(yùn)算,運(yùn)算符的優(yōu)先級(jí)和結(jié)合性遵循慣例)。A.abcd-*+B.ab-cd*+C.ab-c*d+D.abc-d*+答案:C解析 后綴表達(dá)式的計(jì)算是通過(guò)棧來(lái)實(shí)現(xiàn)的。算術(shù)表達(dá)式(a-b)*c+d首先計(jì)算a-b,因此a、b先入棧,當(dāng)遇到“-”號(hào)時(shí)出棧,得出結(jié)果并壓入棧;然后計(jì)算與c相乘的結(jié)果,將c入棧,遇到“*”號(hào)時(shí),出棧,計(jì)算乘積并將結(jié)果入棧;最后進(jìn)行與d的加法運(yùn)算,將d入棧,遇到“+”時(shí)出棧,計(jì)算結(jié)果。問(wèn)題:2

23、5. 以下關(guān)于程序錯(cuò)誤的敘述中,正確的是_。A.編譯正確的程序必然不包含語(yǔ)法錯(cuò)誤B.編譯正確的程序必然不包含語(yǔ)義錯(cuò)誤C.除數(shù)為0的錯(cuò)誤可以在語(yǔ)義分析階段檢查出來(lái)D.除數(shù)為0的錯(cuò)誤可以在語(yǔ)法分析階段檢查出來(lái)答案:C解析 用戶編寫的源程序不可避免地會(huì)有一些錯(cuò)誤,這些錯(cuò)誤大致可以分為靜態(tài)錯(cuò)誤和動(dòng)態(tài)錯(cuò)誤。動(dòng)態(tài)錯(cuò)誤也稱動(dòng)態(tài)語(yǔ)義錯(cuò)誤,它們發(fā)生在程序運(yùn)行時(shí),例如除數(shù)為0、引用數(shù)組元素下標(biāo)錯(cuò)誤等。靜態(tài)錯(cuò)誤是指編譯階段發(fā)現(xiàn)的程序錯(cuò)誤,可分為語(yǔ)法錯(cuò)誤和靜態(tài)語(yǔ)義錯(cuò)誤,如單詞拼寫錯(cuò)誤、標(biāo)點(diǎn)符號(hào)錯(cuò)、表達(dá)式缺少操作數(shù)、括號(hào)不匹配等有關(guān)語(yǔ)言結(jié)構(gòu)上的錯(cuò)誤稱為語(yǔ)法錯(cuò)誤,而語(yǔ)義分析時(shí)發(fā)現(xiàn)的運(yùn)算符與運(yùn)算對(duì)象不合法等錯(cuò)誤屬于靜態(tài)語(yǔ)義

24、錯(cuò)誤。問(wèn)題:26. 算術(shù)表達(dá)式x-(y+c)*8的后綴式是_(-、+、*表示算術(shù)的減、加、乘運(yùn)算,運(yùn)算符的優(yōu)先級(jí)和結(jié)合型遵循慣例)。A.xyc8-+*B.xy-c+8*C.xyc8*+-D.xyc+8*-答案:D解析 后綴表達(dá)式不包含括號(hào),運(yùn)算符放在兩個(gè)運(yùn)算對(duì)象的后面,所有的計(jì)算按運(yùn)算符出現(xiàn)的順序,嚴(yán)格從左向右進(jìn)行(不再考慮運(yùn)算符的優(yōu)先規(guī)則),如:(2+1)*3的后綴式為21+3*。運(yùn)用后綴表達(dá)式進(jìn)行計(jì)算的具體做法:建立一個(gè)棧S。從左到右讀后綴表達(dá)式,如果讀到操作數(shù)就將它壓入棧S中,如果讀到n元運(yùn)算符(即需要參數(shù)個(gè)數(shù)為n的運(yùn)算符)則取出由棧頂向下的n項(xiàng)按操作符運(yùn)算,再將運(yùn)算的結(jié)果代替原棧頂?shù)膎

25、項(xiàng),壓入棧S中。如果后綴表達(dá)式未讀完,則重復(fù)上面過(guò)程,最后輸出棧碩的數(shù)值則為結(jié)束。問(wèn)題:27. 下圖所示為一個(gè)有限自動(dòng)機(jī)(其中,A是初態(tài)、C是終態(tài)),該自動(dòng)機(jī)所識(shí)別的字符串的特點(diǎn)是_。 A.必須以1 1結(jié)尾的0、1串B.必須以00結(jié)尾的0、1串C.必須以01結(jié)尾的0、1串D.必須以10結(jié)尾的0、1串答案:C解析 有限自動(dòng)機(jī)可識(shí)別的字符串,是指從有限自動(dòng)機(jī)的初態(tài)出發(fā),存在一條到達(dá)終態(tài)的路徑,其上的標(biāo)記所構(gòu)成的字符串。本題C是終態(tài),C的前一狀態(tài)只能是B,由B到C輸入的是1;B的前一狀態(tài)可以是A,也可以是B,也可以是C,但輸入的都是0??梢姡撚邢拮詣?dòng)機(jī)識(shí)別的串必須以01結(jié)尾。問(wèn)題:28. 下圖所示

26、為一個(gè)有限自動(dòng)機(jī)(其中,A是初態(tài)、C是終態(tài)),該自動(dòng)機(jī)識(shí)別的語(yǔ)言可用正規(guī)式_表示。 A.(0|1)*01B.1*0*10*1C.1*(0)*01D.1*(0|10)*1*答案:A解析 在正規(guī)式中,符號(hào)*表示重復(fù)若干次(包括0次),符號(hào)|表示“或”。在狀態(tài)A,可以輸入1或0,如果輸入1還可以回到狀態(tài)A,如果輸入0直接到達(dá)狀態(tài)B;在狀態(tài)B,可以輸入0或1,如果輸入0則還回到狀態(tài)B,而輸入1,則進(jìn)入狀態(tài)C;在狀態(tài)C可以輸入0或1,輸入0到達(dá)狀態(tài)B,輸入1到達(dá)狀態(tài)A,但由于C是終態(tài),自動(dòng)機(jī)可識(shí)別的語(yǔ)言是由0、1構(gòu)成的字符串的集合,但該集合必須以01結(jié)束,因此選項(xiàng)A正確。 算術(shù)表達(dá)式采用逆波蘭式表示時(shí)不

27、用括號(hào),可以利用_進(jìn)行求值。與逆波蘭式ab-cd+*對(duì)應(yīng)的中綴表達(dá)式是_。 29.A.數(shù)組B.棧C.隊(duì)列D.散列表答案:B30.A.a-b+c*dB.(a-b)*c+dC.(a-b)*(c+d)D.a-b*c+d答案:C解析 逆波蘭式表示方式把運(yùn)算符寫在運(yùn)算對(duì)象的后面,不需要使用括號(hào)。由于后綴表示中的各個(gè)運(yùn)算是按順序執(zhí)行的,因此,它的計(jì)值很容易實(shí)現(xiàn)。為此,僅需從左到右依次掃視表達(dá)式中的各個(gè)符號(hào),每遇一個(gè)運(yùn)算對(duì)象,就把它壓入棧頂暫存起來(lái);每遇一個(gè)二元(或一元)運(yùn)算符時(shí),就取出棧頂?shù)膬蓚€(gè)(或一個(gè))運(yùn)算對(duì)象進(jìn)行相應(yīng)的運(yùn)算,并用運(yùn)算結(jié)果替換棧頂?shù)倪@兩(或一)個(gè)運(yùn)算對(duì)象,然后再繼續(xù)掃視余留的符號(hào),如此等

28、等,直到掃視完整個(gè)表達(dá)式為止。當(dāng)上述過(guò)程結(jié)束時(shí),整個(gè)表達(dá)式的值將留于棧頂。 a-b+c*d對(duì)應(yīng)的逆波蘭式為:ab-cd*+ (a-b)*c+d對(duì)應(yīng)的逆波蘭式為:ab-c*d+ (a-b)*(c+d)對(duì)應(yīng)的逆波蘭式為:ab-cd+* a-b*c+d對(duì)應(yīng)的逆波蘭式為:abc*-d+ 問(wèn)題:31. 若一種程序設(shè)計(jì)語(yǔ)言規(guī)定其程序中的數(shù)據(jù)必須具有類型,則有利于_。 在翻譯程序的過(guò)程中為數(shù)據(jù)合理分配存儲(chǔ)單元 對(duì)參與表達(dá)式計(jì)算的數(shù)據(jù)對(duì)象進(jìn)行檢查 定義和應(yīng)用動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu) 規(guī)定數(shù)據(jù)對(duì)象的取值范圍及能夠進(jìn)行的運(yùn)算 對(duì)數(shù)據(jù)進(jìn)行強(qiáng)制類型轉(zhuǎn)換 A.B.C.D.答案:B解析 數(shù)據(jù)是程序操作的對(duì)象,類型說(shuō)明數(shù)據(jù)占用的內(nèi)存和

29、存放形式。數(shù)據(jù)類型不僅可用于在基礎(chǔ)機(jī)器中完成對(duì)值的布局,還可以用于檢查表達(dá)式中對(duì)運(yùn)算的應(yīng)用是否正確。問(wèn)題:32. 以下關(guān)于高級(jí)程序設(shè)計(jì)語(yǔ)言翻譯的敘述中,正確的是_。A.可以先進(jìn)行語(yǔ)法分析,再進(jìn)行詞法分析B.在語(yǔ)法分析階段可以發(fā)現(xiàn)程序中的所有錯(cuò)誤C.語(yǔ)義分析階段的工作與目標(biāo)機(jī)器的體系結(jié)構(gòu)密切相關(guān)D.目標(biāo)代碼生成階段的工作與目標(biāo)機(jī)器的體系結(jié)構(gòu)密切相關(guān)答案:D解析 對(duì)于高級(jí)程序設(shè)計(jì)語(yǔ)言,編譯程序會(huì)把編寫的源程序翻譯成與之等價(jià)的目標(biāo)程序。編譯程序的工作過(guò)程分為詞法分析、語(yǔ)法分析、語(yǔ)義分析、中間代碼生成、代碼優(yōu)化、目標(biāo)代碼生成。語(yǔ)法分析要在詞法分析的基礎(chǔ)上,根據(jù)語(yǔ)言的語(yǔ)法規(guī)則將單詞符號(hào)序列分解成各類語(yǔ)法

30、單位??梢姡冗M(jìn)行詞法分析,然后進(jìn)行語(yǔ)法分析,故選項(xiàng)A錯(cuò)誤。在語(yǔ)法分析階段能發(fā)現(xiàn)語(yǔ)法錯(cuò)誤,但不能發(fā)現(xiàn)語(yǔ)義錯(cuò)誤,因此選項(xiàng)B錯(cuò)誤。語(yǔ)義分析階段主要檢查源程序是否包含靜態(tài)語(yǔ)義錯(cuò)誤,并收集類型信息供后面的代碼生成階段使用,可見,語(yǔ)義分析階段的工作與目標(biāo)機(jī)器的體系結(jié)構(gòu)關(guān)聯(lián)不大,選項(xiàng)C錯(cuò)誤。目標(biāo)代碼生成階段的任務(wù)是把中間代碼變化成特定機(jī)器上的絕對(duì)指令代碼、可重定位的指令代碼或匯編指令代碼,這個(gè)階段的工作與具體的機(jī)器密切相關(guān)。問(wèn)題:33. 下圖所示為一個(gè)有限自動(dòng)機(jī)(其中,A是初態(tài)、C是終態(tài)),該自動(dòng)機(jī)可識(shí)別_。 A.0000B.1111C.0101D.1010答案:C解析 有限自動(dòng)機(jī)可識(shí)別的字符串,是指從

31、有限自動(dòng)機(jī)的初態(tài)出發(fā),存在一條到達(dá)終態(tài)的路徑,其上的標(biāo)記所構(gòu)成的字符串。 對(duì)于“0000”,其識(shí)別路徑是狀態(tài)A狀態(tài)B狀態(tài)B狀態(tài)B狀態(tài)B,沒有到達(dá)態(tài)。 對(duì)于“1111”,其識(shí)別路徑是狀態(tài)A狀態(tài)A狀態(tài)A狀態(tài)A狀態(tài)A,沒有到達(dá)態(tài)。 對(duì)于“0101”,其識(shí)別路徑是狀態(tài)A狀態(tài)B狀態(tài)C狀態(tài)B狀態(tài)C,狀態(tài)C為終態(tài),可以識(shí)別。 對(duì)于“1010”,其識(shí)別路徑是狀態(tài)A狀態(tài)A狀態(tài)B狀態(tài)C狀態(tài)B,經(jīng)過(guò)了終態(tài),但沒有以終態(tài)結(jié)束。 問(wèn)題:34. 編譯程序分析源程序的階段依次是_。A.詞法分析、語(yǔ)法分析、語(yǔ)義分析B.語(yǔ)法分析、詞法分析、語(yǔ)義分析C.語(yǔ)義分析、語(yǔ)法分析、詞法分析D.語(yǔ)義分析、詞法分析、語(yǔ)法分析答案:A解析 詞

32、法分析是編譯過(guò)程的第一個(gè)階段,其任務(wù)是對(duì)源程序從前到后(從左到右)逐個(gè)字符地掃描,從中識(shí)別出一個(gè)個(gè)“單詞”符號(hào)。語(yǔ)法分析的任務(wù)是在詞法分析的基礎(chǔ)上,根據(jù)語(yǔ)言的語(yǔ)法規(guī)則將單詞符號(hào)序列分解成各類語(yǔ)法單位。如果源程序中沒有語(yǔ)法錯(cuò)誤,語(yǔ)法分析后就能正確地構(gòu)造其語(yǔ)法樹。語(yǔ)義分析階段的主要任務(wù)是檢查源程序是否包含靜態(tài)語(yǔ)義錯(cuò)誤,并收集類型信息供后面的代碼生成階段使用。問(wèn)題:35. 下圖所示的有限自動(dòng)機(jī)中,0是初始狀態(tài),3是終止?fàn)顟B(tài),該自動(dòng)機(jī)可以識(shí)別_。 A.ababB.aaaaC.bbbbD.abba答案:B解析 從初始狀態(tài)到終止?fàn)顟B(tài)有多條路徑。在狀態(tài)0輸入a到達(dá)狀態(tài)2,在狀態(tài)2可輸入a或b,輸入a到達(dá)狀態(tài)

33、1,輸入b到達(dá)狀態(tài)3,狀態(tài)3下輸入a還回到狀態(tài)3;在狀態(tài)1可輸入a或b,輸入a到達(dá)狀態(tài)3,輸入b到達(dá)狀態(tài)2。問(wèn)題:36. 下圖所示為兩個(gè)有限自動(dòng)機(jī)M1和M2(A是初態(tài)、C是終態(tài)),_。 A.M1和M2都是確定的有限自動(dòng)機(jī)B.M1和M2都是不確定的有限自動(dòng)機(jī)C.M1是確定的有限自動(dòng)機(jī),M2是不確定的有限自動(dòng)機(jī)D.M1是不確定的有限自動(dòng)機(jī),M2是確定的有限自動(dòng)機(jī)答案:D解析 確定有限自動(dòng)機(jī)對(duì)每一個(gè)可能的輸入只有一個(gè)狀態(tài)的轉(zhuǎn)移。非確定有限自動(dòng)機(jī)對(duì)每一個(gè)可能的輸入可以有多個(gè)狀態(tài)轉(zhuǎn)移,接受到輸入時(shí)從這多個(gè)狀態(tài)轉(zhuǎn)移中非確定地選擇一個(gè)。有限自動(dòng)機(jī)M1在狀態(tài)A時(shí),輸入0可以回到狀態(tài)A,也可以到達(dá)狀態(tài)B,可見M

34、1是不確定的。有限自動(dòng)機(jī)M2的每個(gè)狀態(tài)下的輸入都只有一個(gè)轉(zhuǎn)移狀態(tài)。問(wèn)題:37. 以下關(guān)于匯編語(yǔ)言的敘述中,錯(cuò)誤的是_。A.匯編語(yǔ)言源程序中的指令語(yǔ)句將被翻譯成機(jī)器代碼B.匯編程序先將源程序中的偽指令翻譯成機(jī)器代碼,然后再翻譯指令語(yǔ)句C.匯編程序以匯編語(yǔ)言源程序?yàn)檩斎耄詸C(jī)器語(yǔ)言表示的目標(biāo)程序?yàn)檩敵鯠.匯編語(yǔ)言的指令語(yǔ)句必須具有操作碼字段,可以沒有操作數(shù)字段答案:B解析 匯編程序的功能是將匯編語(yǔ)言所編寫的源程序翻譯成機(jī)器指令程序。匯編語(yǔ)言源程序語(yǔ)句可分為指令語(yǔ)句、偽指令語(yǔ)句和宏指令語(yǔ)句。指令語(yǔ)句匯編后產(chǎn)生相應(yīng)的機(jī)器代碼;偽指令語(yǔ)句指示匯編程序在匯編源程序時(shí)完成某些操作,匯編后不產(chǎn)生機(jī)器代碼。問(wèn)題

35、:38. 邏輯表達(dá)式“abc(bx0)”的后綴式為_。(其中、分別表示邏輯與、邏輯或,表示關(guān)系運(yùn)算大于,對(duì)邏輯表達(dá)式進(jìn)行短路求值)A.abcbx0B.abcbxC.abcbx0D.abcbx0答案:D解析 后綴式把運(yùn)算符寫在運(yùn)算對(duì)象后面?!斑壿嬇c”運(yùn)算的優(yōu)先級(jí)高于“邏輯或”運(yùn)算。對(duì)于邏輯表達(dá)式“abc(bx0)”,從運(yùn)算符的優(yōu)先級(jí)方面考慮,需先對(duì)“ab”求值,然后對(duì)“c(bx0)”求值,最后進(jìn)行“”運(yùn)算,因此后綴式為“abcbx0”。問(wèn)題:39. 編譯程序?qū)語(yǔ)言源程序進(jìn)行語(yǔ)法分析時(shí),可以確定_。A.變量是否定義(或聲明)B.變量的值是否正確C.循環(huán)語(yǔ)句的執(zhí)行次數(shù)D.循環(huán)條件是否正確答案:A解

36、析 語(yǔ)法分析是編譯過(guò)程的一個(gè)邏輯階段。語(yǔ)法分析的任務(wù)是在詞法分析的基礎(chǔ)上將單詞序列組合成各類語(yǔ)法短語(yǔ),如“程序”、“語(yǔ)句”、“表達(dá)式”等等。語(yǔ)法分析程序判斷源程序在結(jié)構(gòu)上是否正確。題目中,只有選項(xiàng)A可以在語(yǔ)法分析時(shí)確定。問(wèn)題:40. 以下關(guān)于高級(jí)語(yǔ)言程序的編譯和解釋的敘述中,正確的是_。A.編譯方式下,可以省略對(duì)源程序的詞法分析、語(yǔ)法分析B.解釋方式下,可以省略對(duì)源程序的詞法分析、語(yǔ)法分析C.編譯方式下,在機(jī)器上運(yùn)行的目標(biāo)程序完全獨(dú)立于源程序D.解釋方式下,在機(jī)器上運(yùn)行的目標(biāo)程序完全獨(dú)立于源程序答案:C解析 編譯和解釋是語(yǔ)言處理的兩種基本方式。編譯過(guò)程包括詞法分析、語(yǔ)法分析、語(yǔ)義分析、中間代碼

37、生成、代碼優(yōu)化和目標(biāo)代碼生成等階段,以及符號(hào)表管理和出錯(cuò)處理模塊。解釋過(guò)程在詞法、語(yǔ)法和語(yǔ)義分析方面與編譯程序的工作原理基本相同,但是在運(yùn)行用戶程序時(shí),它直接執(zhí)行源程序或源程序的內(nèi)部形式。 這兩種語(yǔ)言處理程序的根本區(qū)別是:在編譯方式下,機(jī)器上運(yùn)行的是與源程序等價(jià)的目標(biāo)程序,源程序和編譯程序都不再參與目標(biāo)程序的執(zhí)行過(guò)程;而在解釋方式下,解釋程序和源程序(或其某種等價(jià)表示)要參與到程序的運(yùn)行過(guò)程中,運(yùn)行程序的控制權(quán)在解釋程序。解釋器翻譯源程序時(shí)不產(chǎn)生獨(dú)立的目標(biāo)程序,而編譯器則需將源程序翻譯成獨(dú)立的目標(biāo)程序。 問(wèn)題:41. 對(duì)于正規(guī)式0*(10*1)*0*,其正規(guī)集中字符串的特點(diǎn)是_。A.開頭和結(jié)尾

38、必須是0B.1必須出現(xiàn)偶數(shù)次C.0不能連續(xù)出現(xiàn)D.1不能連續(xù)出現(xiàn)答案:B解析 閉包運(yùn)算符“*”將其運(yùn)算對(duì)象進(jìn)行若干次連接,因此0*表示若干個(gè)0構(gòu)成的串,而(10*1)*則表示偶數(shù)個(gè)1構(gòu)成的串。問(wèn)題:42. 將高級(jí)語(yǔ)言源程序翻譯為機(jī)器語(yǔ)言程序的過(guò)程中常引入中間代碼。以下關(guān)于中間代碼的敘述中,錯(cuò)誤的是_。A.不同的高級(jí)程序語(yǔ)言可以產(chǎn)生同一種中間代碼B.使用中間代碼有利于進(jìn)行與機(jī)器無(wú)關(guān)的優(yōu)化處理C.使用中間代碼有利于提高編譯程序的可移植性D.中間代碼與機(jī)器語(yǔ)言代碼在指令結(jié)構(gòu)上必須一致答案:D解析 中間代碼生成階段的工作是根據(jù)語(yǔ)義分析的輸出生成中間代碼?!爸虚g代碼”是一種簡(jiǎn)單而且含義明確的記號(hào)系統(tǒng),可

39、以有若干種形式,它們的共同特征就是與具體的機(jī)器無(wú)關(guān)。問(wèn)題:43. 以下關(guān)于編譯系統(tǒng)對(duì)某高級(jí)語(yǔ)言進(jìn)行翻譯的敘述中,錯(cuò)誤的是_。A.訓(xùn)法分析將把源程序看做一個(gè)線性字符序列進(jìn)行分析B.語(yǔ)法分析階段可以發(fā)現(xiàn)程序中所有的語(yǔ)法錯(cuò)誤C.語(yǔ)義分析階段可以發(fā)現(xiàn)程序中所有的語(yǔ)義錯(cuò)誤D.目標(biāo)代碼生成階段的工作與目標(biāo)機(jī)器的體系結(jié)構(gòu)相關(guān)答案:C解析 在詞法分析階段,源程序可以簡(jiǎn)單地被看成一個(gè)多行的字符串。這一階段的任務(wù)是對(duì)源程序從前到后(從左到右)逐個(gè)字符進(jìn)行掃描,從中識(shí)別出一個(gè)個(gè)“單詞”符號(hào),語(yǔ)法分析的任務(wù)是在詞法分析的基礎(chǔ)上,根據(jù)語(yǔ)言的語(yǔ)法規(guī)則將單詞符號(hào)序列分解為各類語(yǔ)法單位,檢查其中的語(yǔ)法錯(cuò)誤;語(yǔ)義分析階段的主要

40、任務(wù)是檢查源程序是否包含靜態(tài)語(yǔ)義錯(cuò)誤,并收集類型信息供后面的代碼生成階段使用;目標(biāo)代碼生成是編譯器工作的最后一個(gè)階段,這一階段的任務(wù)是把中間代碼變化為特定機(jī)器上的絕對(duì)指令代碼、可重定位的指令代碼或匯編指令代碼,這個(gè)階段的工作與具體的機(jī)器密切相關(guān)。因此說(shuō)法C中發(fā)現(xiàn)所有語(yǔ)義錯(cuò)誤是不對(duì)的。問(wèn)題:44. 由某上下文無(wú)關(guān)文法MS推導(dǎo)出某句子的分析樹如下圖所示,則錯(cuò)誤的敘述是_。 A.該文法推導(dǎo)出的句子必須以a開頭B.acabcbdcc是該文法推導(dǎo)出的一個(gè)句子C.SaAcB是該文法的一個(gè)產(chǎn)生式D.a、b、c、d屬于該文法的終結(jié)符號(hào)集答案:A解析 上圖所示為某上下文無(wú)關(guān)文法MS推導(dǎo)出某句子的分析樹,通過(guò)觀察

41、上圖,只要稍作推導(dǎo)就可推出acabcbdcc是該文法推導(dǎo)出的一個(gè)句子;看該分析樹的第一層分支即可知SaAcB是該文法的一個(gè)產(chǎn)生式;而a、b、c、d因?yàn)樵趫D中是分析樹的葉子,所以都是該文法的終結(jié)符號(hào);右邊的B分支下有SBd,B,所以該文法推導(dǎo)出的句子不一定是a開頭的。問(wèn)題:45. 已知某高級(jí)語(yǔ)言源程序A經(jīng)編譯后得到機(jī)器C上的目標(biāo)程序B,則_。A.對(duì)B進(jìn)行反編譯,不能還原出源程序AB.對(duì)B進(jìn)行反匯編,不能得到與源程序A等價(jià)的匯編程序代碼C.對(duì)B進(jìn)行反編譯,得到的是源程序A的變量聲明和算法流程D.對(duì)A和B進(jìn)行交叉編澤,可以產(chǎn)生在機(jī)器C上運(yùn)行的動(dòng)態(tài)鏈接庫(kù)答案:D解析 高級(jí)語(yǔ)言源程序經(jīng)過(guò)編譯變成可執(zhí)行文

42、件,反編譯就是其逆過(guò)程。但通常不能把可執(zhí)行文件變成高級(jí)語(yǔ)言源代碼,只能轉(zhuǎn)換成匯編程序。 將C、Pascal等高級(jí)語(yǔ)言編出來(lái)的程序進(jìn)行編譯,生成可以被計(jì)算機(jī)系統(tǒng)直接執(zhí)行的文件。反匯編是指將這些執(zhí)行文件反編譯還原成匯編語(yǔ)言或其他高級(jí)語(yǔ)言。 在一種計(jì)算機(jī)環(huán)境中運(yùn)行的編譯程序,能編譯出在另外一種環(huán)境下運(yùn)行的代碼,稱這種編譯器支持交叉編譯。這個(gè)編譯過(guò)程就叫交叉編譯。簡(jiǎn)單地說(shuō),就是在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。 問(wèn)題:46. 如下圖所示有限自動(dòng)機(jī)的特點(diǎn)是_。 A.識(shí)別的0、1串是以0開頭且以1結(jié)尾B.識(shí)別的0、1串中1的數(shù)目為偶數(shù)C.識(shí)別的0、1串中0后面必須是1D.識(shí)別的0、1串中1不能連續(xù)

43、出現(xiàn)答案:D解析 由上圖可知,從初始態(tài)q0輸入0仍然到q0或者輸入1到達(dá)終態(tài)q1,從q1還可以輸入0重新到達(dá)初始態(tài)q0,所以這個(gè)有限自動(dòng)機(jī)識(shí)別的0、1串不一定是以0開頭的,1的數(shù)目的奇偶性也沒辦法確定,0后面也可以是0,所以選項(xiàng)A、B、C都是錯(cuò)誤的。從q0輸入1到達(dá)終態(tài)q1后串結(jié)束,或者q0輸入0再到q0,所以這個(gè)串中的1不會(huì)連續(xù)出現(xiàn),D是正確的。問(wèn)題:47. 由a、b構(gòu)造且僅包含偶數(shù)個(gè)a的串的集合用正規(guī)式表示為_。A.(a*a)*b*B.(b*(ab*a)*)*C.(a*(ba)*b)*D.(ab)*(aa)*答案:B解析 本題主要考查考生對(duì)閉包概念的理解。 *指包括空串在內(nèi)的上所有字符串的

44、集合。關(guān)鍵在于*可取空串,理解了這個(gè)概念就不難看出答案B是正確的。 問(wèn)題:48. 程序語(yǔ)言的大多數(shù)語(yǔ)法現(xiàn)象可用上下文無(wú)關(guān)文法描述。對(duì)于一個(gè)上下文無(wú)關(guān)文法G=(N,T,P,S),其中N是非終結(jié)符號(hào)的集合,T是終結(jié)符號(hào)的集合,P是產(chǎn)生式集合,S是開始符號(hào)。令集合V=NT那么G所描述的語(yǔ)言是_的集合。A.從S出發(fā)推導(dǎo)出的包含V中所有符號(hào)的串B.從S出發(fā)推導(dǎo)出的僅包含T中符號(hào)的串C.N中所有符號(hào)組成的串D.T中所有符號(hào)組成的串答案:A解析 上下文無(wú)關(guān)文法要求,G的任何產(chǎn)生式形如A,AN,V*,可見G所描述的語(yǔ)言是從S出發(fā)推導(dǎo)出的包含V中所有符號(hào)的串的集合。問(wèn)題:49. 設(shè)某上下文無(wú)關(guān)文法如下:S11|1001|S0|SS,則該文法產(chǎn)生的所有二進(jìn)制字符串都具有的特點(diǎn)是_。A.能被3整除B.0、1出現(xiàn)的次數(shù)相等C.0和1的出現(xiàn)

溫馨提示

  • 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)論