




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第12章代碼生成第十二章代碼生成課前索引【課前思考】在第2章PL/0語(yǔ)言編譯程序的實(shí)現(xiàn)中,產(chǎn)生的目標(biāo)代碼是一種與機(jī)器無(wú)關(guān)的假想棧式 計(jì)算機(jī)器匯編語(yǔ)言類(lèi) PCODE,它的執(zhí)行需要用具體機(jī)器配置的語(yǔ)言編寫(xiě)一個(gè)解釋程序。本 章將介紹的代碼生成是把某種高級(jí)程序設(shè)計(jì)語(yǔ)言經(jīng)過(guò)語(yǔ)法語(yǔ)義分析或優(yōu)化后的中間代碼作 為輸入,將其轉(zhuǎn)換成特定機(jī)器的機(jī)器語(yǔ)言或匯編語(yǔ)言作為輸出,這樣的轉(zhuǎn)換程序稱(chēng)為代碼 生成器,因此,代碼生成器的構(gòu)造與輸入的中間代碼形式和輸出的目標(biāo)代碼的機(jī)器結(jié)構(gòu)密 切相關(guān)。本章將主要介紹生成具體機(jī)器匯編語(yǔ)言為目標(biāo)代碼時(shí)需要考慮的一些共同問(wèn)題和 中間語(yǔ)言的選擇考慮。建議學(xué)員考慮如何把 PL/0語(yǔ)言編譯程序的
2、目標(biāo)代碼類(lèi) PCODE翻譯成你所熟悉的具體 機(jī)器的匯編語(yǔ)言,作為學(xué)習(xí)代碼生成的預(yù)習(xí)思考?!緦W(xué)習(xí)目標(biāo)】本章將介紹以具體計(jì)算機(jī)指令作為目標(biāo)代碼的代碼生成器的設(shè)計(jì),以一個(gè)計(jì)算機(jī)模型 為例介紹一個(gè)簡(jiǎn)單的代碼生成器需要考慮的問(wèn)題,在代碼生成時(shí)要考慮充分利用寄存器, 以減少對(duì)內(nèi)存的存取次數(shù)以提高目標(biāo)程序運(yùn)行速度,為此,本章將給出寄存器分配的原則,并使用待用信息鏈表法的代碼生成算法,最后給出中間語(yǔ)言的選擇需要考慮的問(wèn)題。【學(xué)習(xí)指南】由于代碼生成的目標(biāo)代碼與具體計(jì)算機(jī)的結(jié)構(gòu)有關(guān),如指令格式、字長(zhǎng)及寄存器的個(gè)數(shù)和種類(lèi),并與指令的語(yǔ)義和所用操作系統(tǒng)等都密切相關(guān),因此實(shí)現(xiàn)非常困難。通過(guò)本章 學(xué)習(xí),僅為學(xué)員初步了解一
3、個(gè)高級(jí)程序設(shè)計(jì)語(yǔ)言編譯程序目標(biāo)代碼生成需要考慮的問(wèn)題和 解決這些問(wèn)題的基本原則和方法,為今后應(yīng)用打下初步基礎(chǔ)。要想真正掌握代碼生成技術(shù)的細(xì)節(jié),最好的方法是實(shí)現(xiàn)一個(gè)代碼生成器,建議學(xué)員學(xué) 習(xí)本章后,用第2章PL/0語(yǔ)言的中間代碼類(lèi) PCODE為輸入,選擇一個(gè)自己熟悉的匯編語(yǔ) 言為輸出,編寫(xiě)一個(gè)代碼生成器?!倦y重點(diǎn)】重點(diǎn):衡量目標(biāo)代碼的質(zhì)量主要從占用空間和執(zhí)行效率兩方面考慮,而寄存器的合理 分配對(duì)解決這兩方面的問(wèn)題起著重要的作用,因此要求學(xué)員了解寄存器的分配原則很重要,一個(gè)要求執(zhí)行效率高的編譯器對(duì)寄存器的分配可能要進(jìn)行優(yōu)化。另外對(duì)中間語(yǔ)言的選擇也 很重要,希望有較強(qiáng)可移植性,就要求選擇的中間語(yǔ)言能
4、適用較多種類(lèi)的高級(jí)語(yǔ)言和多種 不同的具體計(jì)算機(jī)指令。難點(diǎn):原則好講實(shí)踐困難,對(duì)具體要求和現(xiàn)實(shí)環(huán)境需要具體分析綜合考慮?!局R(shí)點(diǎn)】代碼生成A代碼生成概述 ,A 一個(gè)計(jì)算機(jī)模型 個(gè)簡(jiǎn)單的代碼生成器IA寄存器分配的原則待用信息鏈表法1A代碼生成篁法*中間語(yǔ)言的選擇第12章代碼生成第12章代碼生成代碼生成概述代碼生成是把某種高級(jí)程序設(shè)計(jì)語(yǔ)言經(jīng)過(guò)語(yǔ)法語(yǔ)義分析或優(yōu)化后的中間代碼作為輸 入,將其轉(zhuǎn)換成特定機(jī)器的機(jī)器語(yǔ)言或匯編語(yǔ)言作為輸出,這樣的轉(zhuǎn)換程序稱(chēng)為代碼生成 器,因此,代碼生成器的構(gòu)造與輸入的中間代碼形式和輸出的目標(biāo)代碼的機(jī)器結(jié)構(gòu)密切相 關(guān)。特別是高級(jí)程序設(shè)計(jì)語(yǔ)言和計(jì)算機(jī)硬件結(jié)構(gòu)的多種多樣性為代碼生成
5、的理論研究和實(shí) 現(xiàn)技術(shù)帶來(lái)很大的復(fù)雜性。由于一個(gè)高級(jí)程序設(shè)計(jì)語(yǔ)言的目標(biāo)代碼需反復(fù)使用,因而,代碼生成器的設(shè)計(jì)要著重 考慮目標(biāo)代碼的質(zhì)量問(wèn)題。衡量目標(biāo)代碼的質(zhì)量主要從占用空間和執(zhí)行效率兩個(gè)方面綜合 考慮。到底產(chǎn)生什么樣的目標(biāo)代碼取決于具體的機(jī)器結(jié)構(gòu)、指令格式、字長(zhǎng)及寄存器的個(gè) 數(shù)和種類(lèi),并與指令的語(yǔ)義和所用操作系統(tǒng)、存儲(chǔ)管理等都密切相關(guān)。又由于目標(biāo)代碼的 執(zhí)行效率在很大程度上依賴(lài)于寄存器的使用,所以本章將著重介紹目標(biāo)代碼生成的一些共 同問(wèn)題,如寄存器的分配算法,而不討論某個(gè)特定機(jī)器的目標(biāo)代碼生成問(wèn)題。對(duì)寄存器分 配的算法僅限定在一個(gè)基本塊的范圍內(nèi),以四元式的中間代碼作為輸入,以一個(gè)稱(chēng)作M的模型機(jī)
6、的匯編語(yǔ)言作為輸出。第12章代碼生成一個(gè)計(jì)算機(jī)模型假定一個(gè)M計(jì)算機(jī)具有n個(gè)通用寄存器為 Ro ,Ri,R.1。它們既可作為累加器又可作 為變址器,如果用op表示運(yùn)算符,用M表示內(nèi)存單元,用變量名表示該變量所在的單元, C表示常量,*表示間址方式存取,指令形式可包含以下四種類(lèi)型,見(jiàn)表 12.1(a)。表 12.1(a)指令形式意義(設(shè)op是二目運(yùn)算符)卜接地址型op Ri,M(Ri)op(M)=Ri器型op Ri,Rj(Ri)op(Rj)= Rik址型op Ri,c(Rj)(Ri)op(Rj)+c)= R可接型op Ri,*M(Ri)op(M)op Ri,*Rj(Ri)op(Rj)=Riop R
7、i,*c(Rj)(Ri)op(Rj)+c) = R如果op是一目運(yùn)算符,則op Ri,M的意義為:op(M) = Ri,其余類(lèi)型可類(lèi)推。以上指令中的運(yùn)算符(操作碼)op包括一般計(jì)算機(jī)上常見(jiàn)的一些運(yùn)算符。我們將某些指 令的意義說(shuō)明如表 12.1(b)。表 12.1(b)指令意義指令意義LD Ri,B把B單兀的內(nèi)容取到寄存器Ri,即(B)與JX如CT=0轉(zhuǎn)X單元。1.Ri。JX如CTM轉(zhuǎn)X單元。CMP比較情況把機(jī)器內(nèi)部特征寄存器CT置成J x如CT=2轉(zhuǎn)X單元。A,B相應(yīng)狀態(tài)。CT占兩個(gè)二進(jìn)位。根據(jù) AB分別置 CT為0或1或2。元。思考問(wèn)題: 代碼生成器的設(shè)計(jì)要著重考慮哪些問(wèn)題?決定目標(biāo)代碼的因
8、素有哪些?第12章代碼生成一個(gè)簡(jiǎn)單的代碼生成器本節(jié)介紹一個(gè)簡(jiǎn)單的代碼生成器。它以四元式的中間代碼為輸入。將其轉(zhuǎn)換成第12.2節(jié)中所指的M計(jì)算機(jī)的目標(biāo)代碼為輸出, 并著重討論在一個(gè)基本塊內(nèi)如何充分利用寄存器 提高目標(biāo)代碼的運(yùn)行效率和給出寄存器分配的一般算法。寄存器分配的原則當(dāng)生成某變量的目標(biāo)代碼時(shí),盡量讓變量的值或計(jì)算結(jié)果保留在寄存器中直到寄存器不夠分配時(shí)為止,這樣引用變量值時(shí)可減少對(duì)內(nèi)存的存取次數(shù),以提高運(yùn)行速度。當(dāng)?shù)交緣K出口時(shí),將變量的值存放在內(nèi)存中,因?yàn)橐粋€(gè)基本塊可能有多個(gè)后繼結(jié)點(diǎn)或多個(gè)前驅(qū)結(jié)點(diǎn),同一個(gè)變量名在不同前驅(qū)結(jié)點(diǎn)的基本塊內(nèi)出口前存放的R可能不同,或沒(méi)有定值,所以應(yīng)在出口前把寄存
9、器的內(nèi)容放在內(nèi)存中,這樣從基本塊外入口的變量值 都在內(nèi)存中。對(duì)于在一個(gè)基本塊內(nèi)后邊不再被引用的變量所占用的寄存器應(yīng)盡早釋放,以提高寄存器的利用效率。對(duì)基本塊的劃分可按基本塊的劃分算法(見(jiàn)11.2.1)在生成四元式的目標(biāo)代碼時(shí)進(jìn)行,以區(qū)分基本塊的入口和出口。待用信息鏈表法為了在一個(gè)基本塊內(nèi)的目標(biāo)代碼中,寄存器得到充分利用,我們需把基本塊內(nèi)還要被 引用的變量值盡可能保存在寄存器中,而把基本塊內(nèi)不再被引用的變量所占的寄存器盡早 釋放。當(dāng)由四元式生成相應(yīng)機(jī)器指令時(shí),每翻譯一個(gè)四元式,如: A : =B op C時(shí),則需 知道在本基本塊內(nèi)今后還有哪些四元式要對(duì)變量A, B, C進(jìn)行引用。也就是說(shuō)若在一個(gè)
10、基本塊中,變量 A在四元式i中被定值,在i后面的四元式j(luò)中要引用A值,且從i到j(luò) 之間沒(méi)有其它對(duì) A的定值點(diǎn),這時(shí)我們稱(chēng) j是四元式i中對(duì)變量A的待用信息或稱(chēng)下次引 用信息,同時(shí)也稱(chēng) A是活躍的,若A被多處引用則可構(gòu)成待用信息鏈與活躍信息鏈。為了得到在一個(gè)基本塊內(nèi)每個(gè)變量的待用信息和活躍信息,可以從基本塊出口的四元 式開(kāi)始由后向前掃描,對(duì)每個(gè)變量名建立相應(yīng)的待用信息鏈和活躍變量信息鏈??紤]到處 理的方便,可假定對(duì)基本塊中的變量在出口處都是活躍的,而對(duì)基本塊內(nèi)的臨時(shí)變量可分 為兩種情況處理。a)對(duì)于沒(méi)經(jīng)過(guò)數(shù)據(jù)流分析且中間代碼生成的算法中臨時(shí)變量不允許在基本塊外引用, 則臨時(shí)變量在基本塊出口處都認(rèn)
11、為是不活躍的。b)如果中間代碼生成時(shí)的算法允許某些臨時(shí)變量在基本塊外引用時(shí),則假定這些臨時(shí)變量也是活躍的。下面介紹對(duì)變量待用信息的計(jì)算方法。假設(shè)在變量的符號(hào)表的記錄項(xiàng)中含有待用信息 和活躍信息的欄目,其算法步驟如下:對(duì)各基本塊的符號(hào)表中的待用信息欄和活躍信息”欄置初值,即把待用信息”欄 置非待用二 對(duì)活躍信息欄按在基本塊出口處是否為活躍而置成活躍或非活躍?,F(xiàn)假定變量都是活躍的,臨時(shí)變量都是非活躍的。從基本塊出口到基本塊入口由后向前依次處理每個(gè)四元式。對(duì)每個(gè)四元式i: A:=Bop C,依次執(zhí)行下述步驟:a)把符號(hào)表中變量A的待用信息和活躍信息附加到四元式i上。b)把符號(hào)表中變量 A的待用信息欄
12、和活躍信息欄分別置為“非待用和非活躍”。由于在i中對(duì)A的定值只能在i以后的四元式才能引用,因而對(duì)i以前的四元式來(lái)說(shuō) A 是不活躍也不可能是待用的。c)把符號(hào)表中B和C的待用信息和活躍信息附加到四元式i上。第12章代碼生成d)把符號(hào)表中B和C的待用信息欄置為i,活躍信息欄置為活躍。注意,以上a)和b), c)和d)的次序不能顛倒。例若用A, B, C, D表示變量,用T, U, V表示中間變量,有四元式如下:T : =A-BU : =A-C V : =T+U D : =V+U其名字表中的待用信息和活躍信息如表12.2,用F表示非待用和非活躍,用L表示活躍,用(1)、(2)、(3)、(4)表示四元
13、式序號(hào)。表 12.2f12-3-1.swf表12.2中待用信息鏈與活躍信息鏈”的每列從左至右為每從后向前掃描一個(gè)四元式 時(shí)相應(yīng)變量的信息變化情況,空白處為沒(méi)變化。待用信息和活躍信息在四元式上的標(biāo)記如下所示。T(3)L:= AL - bflU(3)L:= AFL - CFL vl:= tff + u(4)l DFL:= VFF+ uff代碼生成算法為了在代碼生成中能有效地分配寄存器,還需隨時(shí)掌握各寄存器的使用情況。用一個(gè) 數(shù)組RVALUE來(lái)描述(記錄)每個(gè)寄存器當(dāng)前的狀況,是處于空閑狀態(tài)還是被某個(gè)或某幾個(gè) 變量占用;用寄存器 Ri的編號(hào)值作為數(shù)組 RVALUE的下標(biāo),其數(shù)組元素值為變量名(當(dāng) 變
14、量被復(fù)寫(xiě)時(shí),則一個(gè)寄存器的值可表示多個(gè)變量的值);用數(shù)組AVALUEM表示變量的存放情況。因此一個(gè)變量的值可能存放在寄存器中或存放在內(nèi)存中,也可能既在寄存器中 又在內(nèi)存中。綜上所述一個(gè)變量的值表示可能有:RVALUER i=A,C表示Ri的現(xiàn)行值是變量 A , C的值A(chǔ)VALUEA=A 表示A的值在內(nèi)存中AVALUEA=R i,A表示A的值既在寄存器Ri中又在內(nèi)存中AVALUEA=R i表示變量A的值在寄存器Ri中有了上述對(duì)寄存器和地址的描述,可給出寄存器分配和代碼生成的具體算法為:設(shè)GETREG是一個(gè)函數(shù)過(guò)程,它的參數(shù)是一個(gè)形如i: A:=B op C的四元式,每次調(diào)用GETREG(i: A
15、:=B op C)則返回一個(gè)寄存器 R,用以存放A的結(jié)果值。對(duì)如何給出寄存器 R, 要用到四元式i上的待用信息,以使寄存器分配合理,對(duì)每個(gè)四元式的代碼生成都要調(diào)用 函數(shù)GETREG。GETREG分配寄存器的算法為:如果B的現(xiàn)行值在某寄存器 Ri中,且該寄存器只包含 B的值,或者B與A是同一 標(biāo)識(shí)符,或B在該四元式后不會(huì)再被引用,則可選取Ri作為所需的寄存器 R,并轉(zhuǎn)(4)。如果有尚未分配的寄存器,則從中選用一個(gè)Ri為所需的寄存器 R,并轉(zhuǎn)(4)。從已分配的寄存器中選取一個(gè)Ri作為所需寄存器 R,其選擇原則為:占用該寄存器的變量值同時(shí)在主存中,或在基本塊中引用的位置最遠(yuǎn),這樣對(duì)寄存器 Ri所含的
16、變量和變量在主存中的情況必須先做如下調(diào)整:即對(duì)RVALUER i中的每一變量 M,如果M不是A且AVALUEM不包含M ,則需完成以下處理。a)生成目標(biāo)代碼 ST Ri,M;即把不是A的變量值由Ri中送入內(nèi)存中。b)如果 M 不是 B,則令 AVALUEM=M,否則,令 AVALUEM=M, R i。第12章代碼生成c)刪除 RVALUER 口中的 M。給出R,返回。這樣,一旦得到了一個(gè)為四元式運(yùn)算的操作寄存器R,就可以進(jìn)行代碼生成,而當(dāng)目標(biāo)代碼生成完成后,則又需修改寄存器的使用信息和地址描述信息。我們可用圖12.1和圖12.2給出算法的流程圖。圖12.1代碼生成流程圖f12-3-2.swf圖
17、12.2修改寄存器使用信息和地址描述信息流程圖f12-3-3.swf在圖12.2中的B =和C =iR是為了判定B和C是否占有寄存器 Ri(i=0,若 占有并在四元式i后又不是活躍的則可釋放寄存器R。思考問(wèn)題:為什么在代碼生成時(shí)要考慮充分利用寄存器?寄存器分配的原則是什么?第12章代碼生成12.4中間語(yǔ)言的選擇由于代碼生成的任務(wù)是把某種中間語(yǔ)言翻譯成某機(jī)器的匯編語(yǔ)言或機(jī)器語(yǔ)言,因而中 間語(yǔ)言在編譯過(guò)程中起著橋梁作用。中間語(yǔ)言的選擇也成為一個(gè)重要的研究課題?,F(xiàn)僅簡(jiǎn) 單介紹中間語(yǔ)言選擇的一些問(wèn)題。人們期望能找到這樣一種中間語(yǔ)言,它既能適用絕大多數(shù)高級(jí)程序設(shè)計(jì)語(yǔ)言,也能適用各 種計(jì)算機(jī)硬件的結(jié)構(gòu),這
18、樣只要把各種高級(jí)語(yǔ)言都翻譯成一種中間語(yǔ)言,而再把中間語(yǔ)言翻譯成各種機(jī)器的目標(biāo)語(yǔ)言 (匯編語(yǔ)言或機(jī)器語(yǔ)言)。前者稱(chēng)分析程序,后者稱(chēng)代碼生成程序,那么對(duì)一個(gè)新的高級(jí)語(yǔ)言只要寫(xiě)出它的分析程序,則可用不同機(jī)器的代碼生成程序,翻譯成各種機(jī)器的目標(biāo)代碼,這也就相當(dāng)在每種機(jī)器上都有了這樣一種新的語(yǔ)言。對(duì)于一個(gè)新的計(jì)算機(jī)來(lái)說(shuō),只要再寫(xiě)出中間語(yǔ)言翻譯成該機(jī)器語(yǔ)言的代碼生成程序,那么所有的語(yǔ)言和其應(yīng)用程序都可應(yīng)用于這種新機(jī)器。例如:若用過(guò)去傳統(tǒng)的方法,有m種語(yǔ)言,要在n種計(jì)算機(jī)上實(shí)現(xiàn),則需要編寫(xiě)mxn個(gè)編譯程序,而若用上述方法選定的通用中間代碼實(shí)現(xiàn)則只要 m+n個(gè)編譯程序就可實(shí)現(xiàn)。如圖 12.3和圖12.4所示。
19、圖12.4限定幾種源語(yǔ)言和目標(biāo)機(jī)有中間語(yǔ)言的編譯程序示意圖盡管上述的設(shè)想是非??扇〉?加種源語(yǔ)言nHn個(gè)編譯器n種目標(biāo)機(jī)因?yàn)楫?dāng)m和n都較大時(shí),為開(kāi)發(fā)編譯程序所節(jié)省的人力和時(shí)間是相當(dāng)可觀的,然而,要設(shè)計(jì)一種中間語(yǔ)言既滿(mǎn)足各種高級(jí)程序設(shè)計(jì)語(yǔ)言的特性 又要反映不同計(jì)算機(jī)的特點(diǎn),同時(shí)還需要達(dá)到高級(jí)程序設(shè)計(jì)語(yǔ)言編譯程序在各種計(jì)算機(jī)上 實(shí)現(xiàn)應(yīng)有的效率,這是一個(gè)相當(dāng)困難的問(wèn)題。人們進(jìn)一步考慮在限定的條件下解決這樣的 問(wèn)題,雖不能理想的解決問(wèn)題,但在限定的范圍內(nèi)是可以節(jié)省人力和時(shí)間的,其限定的條 件可從以下3種情況考慮。(1)限定幾種高級(jí)語(yǔ)言和幾種計(jì)算機(jī):這種想法僅是把理想的適應(yīng)各種高級(jí)語(yǔ)言和各種計(jì) 算機(jī)的特
20、點(diǎn)范圍縮小而已,它的極小限制是一種高級(jí)語(yǔ)言對(duì)應(yīng)一種計(jì)算機(jī)。而通常可以把 共性較多、特性較接近的高級(jí)語(yǔ)言作為幾種限定的語(yǔ)言,同樣把特點(diǎn)較接近的各種計(jì)算機(jī) 歸結(jié)為限定的幾種計(jì)算機(jī)。按這種限定幾種高級(jí)語(yǔ)言和限定幾種計(jì)算機(jī)所設(shè)計(jì)的中間語(yǔ)言 較容易滿(mǎn)足,并且實(shí)現(xiàn)后的效率也不難達(dá)到。(2)限定計(jì)算機(jī)情況下的中間語(yǔ)言:當(dāng)限定某種計(jì)算機(jī)時(shí),而高級(jí)語(yǔ)言為多種情況下 所設(shè)計(jì)的中間語(yǔ)言, 應(yīng)能充分反映限定計(jì)算機(jī)的特點(diǎn)稱(chēng) MSIL(Machine Specific Intermediate第12章代碼生成language)o對(duì)這種機(jī)器的所有編譯程序在分析階段都生成MSIL ,在實(shí)現(xiàn)一個(gè)編譯程序時(shí),盡量把編譯過(guò)程的大量
21、工作放在代碼生成階段,即MSIL到目標(biāo)程序的翻譯上,以減輕不同語(yǔ)言翻譯的分析任務(wù)。因不管多少種高級(jí)語(yǔ)言,MSIL到目標(biāo)程序的代碼生成只需做一次即可。如圖12.5所示。圖12.5多種源語(yǔ)言對(duì)應(yīng)一種目標(biāo)機(jī)編譯程序的示意圖多種源語(yǔ)言一種目標(biāo)計(jì)算機(jī)(3)限定高級(jí)語(yǔ)言情況下的中間語(yǔ)言:這種中間語(yǔ)言是針對(duì)某種特定的高級(jí)語(yǔ)言設(shè)計(jì)的,稱(chēng)LSIL(Language Specific Intermediate Language),它可以充分反映特定高級(jí)語(yǔ)言的特性, 只要把這特定的高級(jí)語(yǔ)言翻譯成中間語(yǔ)言 LSIL ,然后對(duì)不同的計(jì)算機(jī)只要編寫(xiě)從 LSIL到 相應(yīng)目標(biāo)機(jī)的代碼生成器, 便可實(shí)現(xiàn)這特定高級(jí)語(yǔ)言的編譯程序
22、。 如圖12.6所示。其LSIL 的設(shè)計(jì)要求與具體計(jì)算機(jī)無(wú)關(guān),而LSIL到目標(biāo)機(jī)的代碼生成一般來(lái)說(shuō)不難實(shí)現(xiàn)。圖12.6 一種源語(yǔ)言對(duì)應(yīng)多種目標(biāo)機(jī)時(shí)編譯程序示意圖多種目標(biāo)機(jī)以限定高級(jí)語(yǔ)言情況下的中間語(yǔ)言,有利于編譯程序?qū)崿F(xiàn)途徑的可移植性,如果分析 器是用高級(jí)語(yǔ)言自身編寫(xiě),那么編譯程序還具有自展功能也為移植帶來(lái)極大的方便。這種 方法雖然相當(dāng)成功,但與一種高級(jí)語(yǔ)言對(duì)應(yīng)一種計(jì)算機(jī)所設(shè)計(jì)的編譯程序相比,編譯程序 的效率還是會(huì)有所下降。(4)假想棧式抽象機(jī)假想棧式抽象機(jī)是一種包括基本運(yùn)算和數(shù)據(jù)類(lèi)型的中間語(yǔ)言。這種抽象機(jī)描述了一種或一類(lèi)高級(jí)語(yǔ)言的特性。例如,由U. Ammann等人提供的可移植的 PASCA
23、L編譯程序P4, 采用的棧式抽象機(jī)稱(chēng) SC,對(duì)應(yīng)的中間語(yǔ)言稱(chēng) PCODE。它的實(shí)現(xiàn)是把 PASCAL語(yǔ)言翻譯成 不依賴(lài)任何具體計(jì)算機(jī), 而適合在SC上運(yùn)行的PCODE代碼,然后當(dāng)需要在某一具體機(jī)器 上實(shí)現(xiàn)PASCAL編譯程序時(shí),就用該計(jì)算機(jī)已有的語(yǔ)言或匯編語(yǔ)言書(shū)寫(xiě)一個(gè)對(duì)抽象機(jī)SC及其語(yǔ)言的描述,而描述的最簡(jiǎn)捷辦法是書(shū)寫(xiě)對(duì)PASCAL目標(biāo)程序PCODE在SC上的匯編和解釋程序,用以代替代碼生成過(guò)程。 由于它的分析程序是用 PASCAL語(yǔ)言自身編寫(xiě)的, 所以它的可擴(kuò)展性和可移植性相當(dāng)好,若用匯編語(yǔ)言書(shū)寫(xiě)解釋程序,其效率是可以達(dá)到一般實(shí)用要求的。它的最大缺點(diǎn)是由于 SC和PCODE不依賴(lài)于具體機(jī)器,
24、 而對(duì)其PCODE又 用解釋執(zhí)行代替代碼生成,因而不能反應(yīng)近代計(jì)算機(jī)多變址器的特點(diǎn),致使變址器不能有 效利用,所以這種辦法的目標(biāo)程序執(zhí)行效率下降。綜上所述,一種合適的中間語(yǔ)言選擇是很不容易的,因?yàn)榧纫紤]高級(jí)語(yǔ)言的實(shí)現(xiàn)模第12章代碼生成型,又要能體現(xiàn)目標(biāo)機(jī)的特點(diǎn),再則既要考慮可移植性強(qiáng)又希望移植后的效率盡量不下降。目前中間代碼的形式通常有前綴表示、后綴表示、四元組、三元組、樹(shù)表示等各種形式。 在實(shí)際應(yīng)用中只好根據(jù)具體需要進(jìn)行選擇。小結(jié):一個(gè)高級(jí)程序設(shè)計(jì)語(yǔ)言編譯程序的代碼生成部分在編譯中起著關(guān)鍵性的作用,而它又 與計(jì)算機(jī)硬件的結(jié)構(gòu)乃致細(xì)節(jié)緊密相關(guān),這導(dǎo)致了代碼生成的可移植性及自動(dòng)生成算法的 研究
25、,無(wú)論在理論上還是在實(shí)踐上都相當(dāng)困難。因此,本章介紹的僅是一些一般性的考慮 原則問(wèn)題。在目前實(shí)際應(yīng)用中大多數(shù)高級(jí)程序設(shè)計(jì)語(yǔ)言編譯程序的前端用編譯程序的構(gòu)造 工具(將在第13章介紹)實(shí)現(xiàn),后端的代碼生成按選好的中間代碼作為輸入,但是中間語(yǔ)言的選擇希望既滿(mǎn)足各種高級(jí)程序設(shè)計(jì)語(yǔ)言的特性又要反映不同計(jì)算機(jī)的特點(diǎn),也是一個(gè) 相當(dāng)困難的問(wèn)題。實(shí)際應(yīng)用中中間代碼的選擇如12.4節(jié)中給出的限定條件下解決的3種情況。(1)限定幾種高級(jí)語(yǔ)言和幾種計(jì)算機(jī)把共性較多、特性較接近的高級(jí)語(yǔ)言作為幾種限定的語(yǔ)言,同樣把特點(diǎn)較接近的各種 計(jì)算機(jī)歸為限定的幾種計(jì)算機(jī)。(2)在計(jì)算機(jī)限定情況下的中間語(yǔ)言限定某種計(jì)算機(jī)時(shí),而高級(jí)語(yǔ)言為多種情況下所設(shè)計(jì)的中間語(yǔ)言,能充分反映限定計(jì) 算機(jī)的特點(diǎn)。(3)高級(jí)語(yǔ)言限定情況下的中間語(yǔ)言這種中間語(yǔ)言是針對(duì)某種特定的高級(jí)語(yǔ)言設(shè)計(jì)的,它可以充分反映特定高級(jí)語(yǔ)言的特 性,只要把這特定的高級(jí)語(yǔ)言翻譯成中間語(yǔ)言L(fǎng)SIL ,然后對(duì)不同的計(jì)算機(jī)只要編寫(xiě)從LSIL到相應(yīng)目標(biāo)機(jī)的代碼生成器,便可實(shí)現(xiàn)這特定高級(jí)語(yǔ)言的編譯程序。其LSIL的設(shè)計(jì)要求與具體計(jì)算機(jī)無(wú)關(guān)。而 LSIL到目標(biāo)機(jī)的代碼生成一般來(lái)說(shuō)不難實(shí)現(xiàn),這種編譯程序的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 一樓陽(yáng)臺(tái)外墻防水施工方案
- 建筑舊房屋拆除的施工方案
- 梁溪四星級(jí)酒店施工方案
- 2025至2031年中國(guó)聚酯薄膜絕緣紙行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 2025至2031年中國(guó)索具配件行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 阿克塞硅pu跑道施工方案
- 2025至2031年中國(guó)淋浴混合閥行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 2025至2031年中國(guó)水下不分散劑行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 梁板起重運(yùn)輸專(zhuān)項(xiàng)施工方案
- 2025至2031年中國(guó)外窺式光電轉(zhuǎn)換探頭行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 川2020J146-TJ 建筑用輕質(zhì)隔墻條板構(gòu)造圖集
- (完整)讀歌詞猜歌名
- 八年級(jí)下開(kāi)學(xué)第一課主題班會(huì)
- 科技成果-企業(yè)污染物排放大數(shù)據(jù)監(jiān)控及知識(shí)圖譜構(gòu)建
- 初中英語(yǔ)人教版 八年級(jí)上冊(cè) 單詞默寫(xiě)表 漢譯英
- 花籃拉桿懸挑架培訓(xùn)課件
- 后印象派繪畫(huà)
- pcs-9611d-x說(shuō)明書(shū)國(guó)內(nèi)中文標(biāo)準(zhǔn)版
- GB/T 1634.1-2004塑料負(fù)荷變形溫度的測(cè)定第1部分:通用試驗(yàn)方法
- GB/T 13145-2018冷藏集裝箱堆場(chǎng)技術(shù)管理要求
- 《城市管理綜合執(zhí)法問(wèn)題研究國(guó)內(nèi)外文獻(xiàn)綜述》4800字
評(píng)論
0/150
提交評(píng)論