版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
編譯原理課件蘭州大學(xué)信息學(xué)院1CompilerPrinciples第一講引論課程介紹編譯程序概述2CompilerPrinciples§1.課程介紹一、課程名稱:編譯原理基本內(nèi)容是介紹編譯程序構(gòu)造的基本原理、方法和技術(shù),包括詞法分析、語法分析、語義分析與中間代碼產(chǎn)生、代碼優(yōu)化及目標(biāo)代碼產(chǎn)生等。簡言之,就是介紹如何將源程序翻譯成目標(biāo)代碼程序。3CompilerPrinciples二、課程性質(zhì):專業(yè)基礎(chǔ)課,必修編譯程序(器)出現(xiàn)于上世紀(jì)50年代后期(第一個(gè)高級(jí)語言1958年)60年代~70年代是研究高峰期60年代中期開始在高校中開設(shè)課程80年代開始作為計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的必修基礎(chǔ)課程4CompilerPrinciples5CompilerPrinciples三、課程特點(diǎn):充分體現(xiàn)了計(jì)算學(xué)科中抽象、理論和設(shè)計(jì)三個(gè)學(xué)科形態(tài)該課程涉及多門課程的內(nèi)容綜合運(yùn)用,涉及面廣,內(nèi)容龐雜,學(xué)習(xí)艱難程序設(shè)計(jì)語言、計(jì)算機(jī)體系結(jié)構(gòu)、語言理論及算法等數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)該課程涉及的原理、方法和技術(shù)具有十分普遍的意義每一個(gè)計(jì)算機(jī)科學(xué)與技術(shù)工作者的職業(yè)生涯中反復(fù)用到,“享用一輩子”這兒接受的訓(xùn)練很難在其他地方獲得,如:抽象與形式化方法、局部與全局優(yōu)化方法、構(gòu)造技術(shù)、證明方法等6CompilerPrinciples四、學(xué)習(xí)該課程的意義編譯程序是計(jì)算機(jī)系統(tǒng)不可缺少的重要組成部分對(duì)程序設(shè)計(jì)語言的設(shè)計(jì)與實(shí)現(xiàn)能有更深刻的理解對(duì)程序設(shè)計(jì)語言有關(guān)理論有所了解從宏觀上把握程序設(shè)計(jì)語言—掌握了編譯原理后,就不能再說:“某語言未學(xué)過,所以不會(huì)”有助于快速理解、定位和解決程序調(diào)試與運(yùn)行中出現(xiàn)的問題7CompilerPrinciples編譯方法與技術(shù)有著廣泛應(yīng)用安全技術(shù)、程序理解、軟件逆向工程、應(yīng)用軟件與軟件工具開發(fā)、軟件測試與驗(yàn)證等編譯課程蘊(yùn)含著計(jì)算學(xué)科中解決問題的思路、抽象和方法,這些與高等數(shù)學(xué)一樣,使你“享用一輩子”課程所涉及的內(nèi)容至今非?;钴S自然語言的翻譯軟件移植網(wǎng)絡(luò)安全形式化方法形式語義學(xué)等8CompilerPrinciples
鑒于以上所述,作為計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)的學(xué)生必須學(xué)習(xí)和掌握編譯原理這門課程,當(dāng)然由于其綜合性、處理問題的復(fù)雜性等,學(xué)習(xí)起來有一定難度,這就需要艱苦奮斗的精神和良好的學(xué)習(xí)方法9CompilerPrinciples五、學(xué)習(xí)方法編譯程序的構(gòu)造是一個(gè)龐大而復(fù)雜的系統(tǒng)工程,無論是概念還是理論、方法,對(duì)初學(xué)者來說許多都是新的,學(xué)習(xí)起來會(huì)感到困難大一些,這一點(diǎn)必須有充分認(rèn)識(shí),為此建議學(xué)習(xí)方法上注意以下幾點(diǎn):10CompilerPrinciples課前預(yù)習(xí),課堂認(rèn)真聽講,課后復(fù)習(xí)加深理解,特別要經(jīng)常有意識(shí)地將前后內(nèi)容聯(lián)系起來融會(huì)貫通。
因?yàn)榫幾g程序是一個(gè)龐大的程序系統(tǒng),講解過程必須“分而治之”(這也是人們處理復(fù)雜問題的基本方法),這就要求大家在學(xué)習(xí)過程中,始終以處理過程為主線,把前后聯(lián)系起來考慮。11CompilerPrinciples理論聯(lián)系實(shí)際——親自動(dòng)手,構(gòu)造一個(gè)演示性編譯程序,至少要完成掃描器和語法分析器,以及語法制導(dǎo)翻譯產(chǎn)生中間代碼(課程設(shè)計(jì))認(rèn)真完成作業(yè),進(jìn)一步鞏固并加深理解所學(xué)知識(shí)特別要下功夫認(rèn)真學(xué)習(xí)如何從實(shí)際問題進(jìn)行抽象并形式化,最終建立實(shí)際問題的模型(上升為理性認(rèn)識(shí)),并借助模型進(jìn)一步設(shè)計(jì)實(shí)現(xiàn),這將對(duì)你能力的提高大有益處12CompilerPrinciples六、參考書13CompilerPrinciples§2.編譯程序概述一、翻譯程序(Translator)
能夠把一種語言程序(稱為源語言程序)轉(zhuǎn)換成邏輯上等價(jià)的另一種語言程序(稱為目標(biāo)語言程序)的程序14CompilerPrinciples任何非機(jī)器語言程序都需要翻譯程序翻譯程序的工作就是進(jìn)行等價(jià)變換(映射)兩個(gè)程序邏輯上等價(jià)是指對(duì)相同輸入得到相同的輸出翻譯程序解釋程序匯編程序編譯程序15CompilerPrinciples匯編程序(Assembler)
把匯編語言程序轉(zhuǎn)變?yōu)闄C(jī)器語言程序的翻譯程序解釋程序(Interpreter)
把源程序作為輸入接收,邊解釋邊執(zhí)行的翻譯程序源程序數(shù)據(jù)解釋程序結(jié)果16CompilerPrinciples編譯程序
將高級(jí)語言程序轉(zhuǎn)變?yōu)榈图?jí)語言程序的翻譯程序源程序編譯程序目標(biāo)程序17CompilerPrinciples這是GCC的例子18CompilerPrinciples19CompilerPrinciples編譯程序又可根據(jù)用途和側(cè)重點(diǎn)的不同,進(jìn)一步分類為:
①診斷編譯程序(DiagnosticCompiler)
專門用于幫助程序開發(fā)和調(diào)試的編譯程序
②優(yōu)化編譯程序(OptimizingCompiler)
著重于提高目標(biāo)代碼效率的編譯程序
③交叉編譯程序(CrossCompiler)
能夠產(chǎn)生不同于其宿主機(jī)機(jī)器代碼的編譯程序
④可變目標(biāo)編譯程序(Retargetablecomplier)
無須重寫與機(jī)器無關(guān)部分就能改變目標(biāo)機(jī)的編譯程序20CompilerPrinciples二、與編譯程序相關(guān)的程序本講義只介紹編譯程序(器)構(gòu)造的基本原理、方法與技術(shù),但在一個(gè)完整的語言開發(fā)(或稱程序設(shè)計(jì))環(huán)境中,除了編譯器這一主要工具外,還需要其他一些工具,如編輯器、連接器、裝入程序等。現(xiàn)代計(jì)算機(jī)系統(tǒng)常將這些相互獨(dú)立的程序設(shè)計(jì)工具集成起來,構(gòu)成一個(gè)集成化的程序開發(fā)環(huán)境,以提高程序設(shè)計(jì)效率和程序的質(zhì)量。如TurboC、VisualC++等語言環(huán)境都是集成化的程序設(shè)計(jì)環(huán)境。而Ada語言的集成環(huán)境是這方面的典型代表。21CompilerPrinciples如Ada語言的集成環(huán)境是一個(gè)分層的程序開發(fā)環(huán)境編譯程序MAPSE編輯程序連接程序宿主機(jī)OSAPSE工具界面用戶界面KAPSE調(diào)試程序配置管理程序命令解釋程序其他工具22CompilerPrinciples這兒要強(qiáng)調(diào)的是:盡管本課程只介紹編譯的基本理論、方法和技術(shù),但這些基本理論、方法與技術(shù)對(duì)其他工具的構(gòu)造同樣起作用!23CompilerPrinciples編輯器(Editor)
完成源程序輸入、編輯并產(chǎn)生標(biāo)準(zhǔn)文件(如ASCII文件)的程序。近來已與編譯器和其他程序捆綁進(jìn)一個(gè)交互開發(fā)環(huán)境——IDE中盡管這樣的編輯器仍生成標(biāo)準(zhǔn)文件,但會(huì)轉(zhuǎn)向正被討論的程序設(shè)計(jì)語言的格式或結(jié)構(gòu)(稱為基于結(jié)構(gòu)的),且已包含了編譯器的某些操作;因此在程序編寫時(shí)而不是編譯時(shí)就可得知錯(cuò)誤,甚至也可調(diào)用編譯器24CompilerPrinciples預(yù)處理程序(Preprocessor)
在真正翻譯開始之前產(chǎn)生編譯程序的輸入的程序處理宏及注釋:宏是被經(jīng)常使用的較長結(jié)構(gòu)的縮寫處理文件包含:把頭文件包含到程序正文中(如C的文件包含include<….h>)“理解”預(yù)處理器:把現(xiàn)代控制流和數(shù)據(jù)結(jié)構(gòu)機(jī)制添加到比較老式的語言中語言擴(kuò)充:通過大量的內(nèi)部宏定義來增強(qiáng)語言的能力,如Equel語言是一種嵌套在C語言中的數(shù)據(jù)庫查詢語言25CompilerPrinciples連接程序(Linker)——又稱為連接編輯器。將分別在不同的目標(biāo)文件中編譯(或匯編)的代碼、所用標(biāo)準(zhǔn)庫函數(shù)的代碼以及操作系統(tǒng)提供的資源(如存儲(chǔ)分配程序及輸入/輸出設(shè)備)收集到一個(gè)可直接執(zhí)行的文件中的程序裝配程序(Loader)
完成程序的裝入和連接編輯兩項(xiàng)功能。裝入過程包括讀入可重定位機(jī)器代碼、修改可重定位地址、并將修改后的指令和數(shù)據(jù)放到內(nèi)存的適當(dāng)位置。
裝入程序使得可執(zhí)行代碼更加靈活26CompilerPrinciples調(diào)試程序(Debugger)
可在被編譯了的程序中判定執(zhí)行錯(cuò)誤的程序它經(jīng)常與編譯程序一起放在IDE中運(yùn)行一個(gè)帶有調(diào)試程序的程序與直接執(zhí)行不同,這是因?yàn)檎{(diào)試程序保存著所有的或大多數(shù)源代碼信息,它可以在預(yù)先指定的位置(斷點(diǎn)BreakPoint)暫停執(zhí)行,并提供有關(guān)信息(已調(diào)用的函數(shù)、變量名的當(dāng)前值等)27CompilerPrinciples其他有關(guān)的還有描述器(Profiler)——執(zhí)行中搜集目標(biāo)程序行為統(tǒng)計(jì)的程序項(xiàng)目管理程序(ProjectManager)——如Unix系統(tǒng)中的SCCS(源代碼控制系統(tǒng))和RCS(修正控制系統(tǒng))和匯編程序等綜上所述可給出一個(gè)“語言處理系統(tǒng)”的圖示:28CompilerPrinciples我們這個(gè)課只介紹編譯程序這一部分29CompilerPrinciples三、編譯過程與編譯程序結(jié)構(gòu)
1.編譯過程:
輸入輸出(高級(jí)語言源程序)(低級(jí)語言目標(biāo)程序)
編譯程序工作過程如下:識(shí)別出一個(gè)個(gè)的單詞分析句子的語法結(jié)構(gòu)分析句子的語義并進(jìn)行初步翻譯對(duì)初步翻譯進(jìn)行優(yōu)化整理出目標(biāo)程序?qū)σ陨线^程進(jìn)一步整理可得如下編譯程序結(jié)構(gòu)總框:編譯程序30CompilerPrinciples2.編譯程序總框:詞法分析器語法分析器語義分析與中間代碼產(chǎn)生器優(yōu)化器目標(biāo)代碼生成器單詞符號(hào)語法單位中間代碼中間代碼出錯(cuò)處理表格管理源程序目標(biāo)代碼31CompilerPrinciples3.五個(gè)階段簡介第一階段:詞法分析——依據(jù)語言構(gòu)詞規(guī)則,識(shí)別出一個(gè)個(gè)單詞(符號(hào))
單詞種類保留字:forifwhile算符:+-×/界符:,;(){}標(biāo)識(shí)符:a1a2pi常數(shù):910244.86E6無窮性有窮性思考:識(shí)別有窮集合VS識(shí)別無窮集合32CompilerPrinciples
詞法分析工作由詞法分析器(或稱掃描器)完成。
掃描器輸出為等長度的單詞符號(hào)(二元式)流。
例:Position=initial+rate*60詞法分析(掃描器)保留字表(06,‘Position’)
(11,─)
(06,‘initial’)
(12,─)
(06,‘rate’)
(13,─)
(07,’60的二進(jìn)制’)33CompilerPrinciples第二階段:語法分析——依據(jù)語言的語法規(guī)則,把掃描器提供的單詞符號(hào)串分解成各種語法單位(范疇),如“短語”、“子句”、“句子”乃至“程序”。同時(shí)進(jìn)行語法檢查,以確定輸入串是否正確,該工作是由語法分析器完成的。
如:Position=initial+rate*60是一個(gè)“賦值表達(dá)式”(C語言中)Position=表達(dá)式表達(dá)式表達(dá)式+表達(dá)式標(biāo)識(shí)符表達(dá)式*表達(dá)式initial標(biāo)識(shí)符常數(shù)rate60標(biāo)識(shí)符34CompilerPrinciples第三階段:語義分析與中間代碼產(chǎn)生——針對(duì)各類不同的語法范疇,按語言的語義規(guī)則進(jìn)行語義分析和初步翻譯工作,產(chǎn)生某種中間語言形式的中間代碼(即一種結(jié)構(gòu)簡單,含義明確的記號(hào)系統(tǒng))。
該階段工作通常包括兩個(gè)方面的工作:
對(duì)每種語法范疇進(jìn)行靜態(tài)語義檢查,包括:變量是否定義過類型是否正確是否用了0作除數(shù)……35CompilerPrinciples將語法范疇翻譯成某種形式的中間代碼,如四元式:OpARG1ARG2Result*rate60T1+initialT1T2
=T2Position36CompilerPrinciples第四階段:優(yōu)化——對(duì)前階段產(chǎn)生的中間代碼進(jìn)行加工變換,以期在最后階段能產(chǎn)生出高效(節(jié)省時(shí)、空)的目標(biāo)代碼,這一任務(wù)是由優(yōu)化器來完成的根據(jù)優(yōu)化的范圍不同,可分為:
局部優(yōu)化,循環(huán)優(yōu)化和全局優(yōu)化一個(gè)循環(huán)優(yōu)化的例子:37CompilerPrinciples⑴=1K⑴=IM⑵J<100K⑼⑵=JN⑶*10KT1⑶=1K⑷+I(xiàn)T1M⑷J<100K⑼⑸*10KT2⑸+M10M⑹+JT2N⑹+N10N⑺+K1K⑺+K1K⑻J⑵⑻J⑷⑼…⑼…循環(huán)
For(k=1;k<=100;k++){M=I+10*k;N=J+10*k;}優(yōu)化前用了兩個(gè)臨時(shí)工作單元(T1,T2),
優(yōu)化后沒有用臨時(shí)單元優(yōu)化前循環(huán)體中要做300次加、200次乘,
優(yōu)化后循環(huán)體內(nèi)只做300次加38CompilerPrinciples第五階段:目標(biāo)代碼生成——把中間代碼翻譯成目標(biāo)代碼顯然這階段要依賴于硬體系統(tǒng)結(jié)構(gòu)和指令系統(tǒng)涉及存貯分配、寄存器調(diào)度這一階段工作是由代碼生成器完成的說明:以上各階段(或稱工序)并不是截然分開的,尤其編譯程序結(jié)構(gòu)十分復(fù)雜、體積相當(dāng)龐大,所以有時(shí)人們把幾個(gè)階段的工作有機(jī)地組合在一起、穿插進(jìn)行,構(gòu)成遍。39CompilerPrinciples遍(Pass):對(duì)源程序或源程序的中間代碼從頭到尾掃描一次并做相應(yīng)處理加工分遍的好處是結(jié)構(gòu)清晰、節(jié)省內(nèi)存(每遍都從外存獲取前一遍的結(jié)果作為開始,工作結(jié)果仍記入外存,每遍幾乎可使用全部內(nèi)存)分不分遍、如何分遍要視具體情況——計(jì)算機(jī)內(nèi)存容量、源語言的繁簡、從事編譯程序設(shè)計(jì)人員的情況等40CompilerPrinciples如某PL/0編譯程序的結(jié)構(gòu)詞法分析程序語法語義分析程序代碼生成程序PL/0源程序目標(biāo)程序表格管理程序出錯(cuò)處理程序41CompilerPrinciples
4.前端與后端:概念上講,編譯程序的五個(gè)階段可進(jìn)一步劃分為前端和后端:前端:主要由與源語言有關(guān)而與目標(biāo)機(jī)無關(guān)的部分組成,包括詞法分析、語法分析、語義分析和中間代碼產(chǎn)生。代碼優(yōu)化一般也包含在前端。后端:主要由與目標(biāo)機(jī)有關(guān)的部分組成,包括目標(biāo)代碼生成和與目標(biāo)機(jī)有關(guān)的優(yōu)化等。42CompilerPrinciples源程序詞法分析語法分析語義分析和中間代碼產(chǎn)生中間語言中間代碼優(yōu)化目標(biāo)代碼生成目標(biāo)代碼優(yōu)化目標(biāo)語言前端后端43CompilerPrinciples劃分前端和后端,就可以僅改寫后端而生成不同目標(biāo)機(jī)上的目標(biāo)程序,當(dāng)然也可考慮對(duì)不同語言僅稍加改變前端而產(chǎn)生相同的中間代碼,經(jīng)同一后端生成相同目標(biāo)機(jī)的目標(biāo)代碼。就目前來說,針對(duì)相同中間代碼適應(yīng)不同目標(biāo)機(jī)的工作較多,如Ada語言的APSE(Ada程序設(shè)計(jì)環(huán)境)中使用的Diana中間代碼,Java語言定義的虛擬機(jī)代碼——Bytecode中間語言,都是定義良好的中間語言。44CompilerPrinciplesJava的傳統(tǒng)環(huán)境Java源程序(.java)編譯環(huán)境Java編譯器Java字節(jié)碼(.class)Java字節(jié)碼(本地或網(wǎng)絡(luò)傳輸)運(yùn)行環(huán)境類加載程序字節(jié)碼驗(yàn)證Java類庫Java解釋器即時(shí)編譯器Java虛擬機(jī)硬件45CompilerPrinciples5.表格與表格管理表格記錄源程序中的各類有用信息——名字、函數(shù)、標(biāo)號(hào)、過程、數(shù)值等每個(gè)階段的工作都要與表格打交道:查、填、改等表格的結(jié)構(gòu)與處理方法:統(tǒng)一的大表與分類的小表統(tǒng)一大表名字欄為主欄(關(guān)鍵字欄),信息欄又分成若干子欄——種屬、類型等NAMEINFORMATION46CompilerPrinciples分類小表:每類一張表,如:符號(hào)名表(SNT)
常數(shù)表(CT)
3.141592648…X啞元實(shí)型A數(shù)組整型…………47CompilerPrinciplesDO編號(hào)(03)……L1入口地址……Swap二目子程序
入口地址……入口表(ENT)
標(biāo)號(hào)表(LBT)
基本字表(KWT)48CompilerPrinciples6.出錯(cuò)處理:這是編譯程序的又一重要組成部分,因?yàn)榫幾g的各個(gè)階段都有可能發(fā)現(xiàn)源程序中的錯(cuò)誤。一旦發(fā)現(xiàn)這樣或那樣的錯(cuò)誤,就應(yīng)把錯(cuò)誤的性質(zhì)及位置報(bào)告給用戶,并且使編譯能繼續(xù)下去。
思考:如何準(zhǔn)確地報(bào)告錯(cuò)誤如何從錯(cuò)誤中恢復(fù)過來49CompilerPrinciples四、編譯程序的構(gòu)造過程1.需求分析,確定語言文本(1)確定語言的種類:
按語言范型分類,當(dāng)今大多數(shù)程序語言可分為四類:過程式(強(qiáng)制式語言):命令驅(qū)動(dòng),面向語句,如FORTRAN、PASCAL、Ada及C等函數(shù)式(應(yīng)用式)語言:功能驅(qū)動(dòng),面向函數(shù),如LISP、SNOBOL及ML等邏輯式(基于規(guī)則的)語言:依據(jù)條件進(jìn)行邏輯推演,如Prolog等OO語言:支持封裝性、繼承性、多態(tài)性及動(dòng)態(tài)聚束等,以對(duì)象為運(yùn)行單位,如Smalltalk、Java、C++等50CompilerPrinciples
通過用戶提供的應(yīng)用范圍,決定采用何種語言。例如:偏重于科學(xué)計(jì)算的則選用Fortran;偏重于符號(hào)處理的則選用Lisp或Snobol;偏重于事務(wù)處理的則選用Cobol或數(shù)據(jù)庫管理語言;……51CompilerPrinciples(2)深刻理解語言的結(jié)構(gòu)、語法及語義這就是說不僅僅是用程序設(shè)計(jì)語言編幾個(gè)程序的問題,而是要在語法和語義方面下一些功夫。具體說來有以下幾個(gè)方面:①程序語言的定義:任何程序語言都是某個(gè)確定的字符集上的符號(hào)按照一定規(guī)則組成的有窮序列。這里所謂的規(guī)則是從兩個(gè)方面來談的:·語法規(guī)則:用于形成和產(chǎn)生一個(gè)正確的程序的一組規(guī)則?!ふZ義規(guī)則:用于定義程序意義的一組規(guī)則。52CompilerPrinciples例如:從語法的角度看,標(biāo)識(shí)符和名字是一個(gè)東西,都是以字母開頭的字母數(shù)字串;但從語義的角度看,標(biāo)識(shí)符是一個(gè)沒有任何意義的字符序列,而名字卻有確定的意義和屬性,而且具有一定的作用域和定義域,即有局部和全部之分。又如:程序從語法角度看,是一些語法范疇構(gòu)成的如下層次結(jié)構(gòu):53CompilerPrinciples程序分程序或子程序(過程、函數(shù)等)語句表達(dá)式數(shù)據(jù)引用算符函數(shù)調(diào)用而從語義的角度來說,程序是描述一定的數(shù)據(jù)結(jié)構(gòu)及其處理過程。54CompilerPrinciples②程序結(jié)構(gòu):現(xiàn)代高級(jí)語言程序通常由若干子程序段(過程、函數(shù)等)構(gòu)成,許多語言還引入了類、程序包等更高級(jí)的結(jié)構(gòu)。例如,F(xiàn)ortran、C程序是塊結(jié)構(gòu)的;Pascal程序是過程嵌套的;Algol既有分程序嵌套,又有過程嵌套;Java與C++是面向?qū)ο蟮模鼈兒苤匾姆矫媸穷惡屠^承的概念,同時(shí)支持多態(tài)性和動(dòng)態(tài)聚束等特性;而在Ada中引入了程序包,它可以把數(shù)據(jù)和操作代碼封裝在一起,支持?jǐn)?shù)據(jù)抽象。(詳見教材P15-18)55CompilerPrinciples③語言的基本成分:包括數(shù)據(jù)類型、表達(dá)式、語句、過程或函數(shù)等,這些在學(xué)習(xí)語言課時(shí)都已經(jīng)學(xué)過了,但從編譯的角度出發(fā),應(yīng)如何了解這些基本成分呢?·初等數(shù)據(jù)類型:牽扯到存儲(chǔ)空間的問題;·結(jié)構(gòu)數(shù)據(jù)類型:牽扯到下標(biāo)、維數(shù)、存放方式、分配時(shí)間----動(dòng)態(tài)與靜態(tài)等;·表達(dá)式:牽扯到運(yùn)算分量、運(yùn)算符、形成規(guī)則、運(yùn)算順序等;·語句:順序、控制、循環(huán)等;·過程與參數(shù)傳遞:傳地址、傳值、傳名、得結(jié)果等;·存儲(chǔ)管理:靜態(tài)存儲(chǔ)分配、動(dòng)態(tài)存儲(chǔ)分配;56CompilerPrinciples2.由程序設(shè)計(jì)環(huán)境確定編譯程序構(gòu)造的方式和方法最早是直接使用機(jī)器語言或匯編語言現(xiàn)在一般使用高級(jí)語言Pascal或C語言
好處:編譯方式還是解釋方式便于閱讀、理解和移植提高程序設(shè)計(jì)效率易于查錯(cuò)和修改57CompilerPrinciples任何一個(gè)編譯程序至少要涉及三種語言:源語言(S)、目標(biāo)語言(T)和編譯程序?qū)崿F(xiàn)語言(I),可用如下T型圖來表示三者之間的關(guān)系:STI58CompilerPrinciplesAda語言A
代碼Ada語言A
代碼CCA代碼A代碼A代碼用C語言編寫Ada編
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版思想品德七年級(jí)下學(xué)期全冊(cè)教案
- 2024至2030年中國摩托車輪平衡機(jī)數(shù)據(jù)監(jiān)測研究報(bào)告
- 2024至2030年中國多功能制桶整形機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2024至2030年中國卷筒紙印刷壓紋機(jī)數(shù)據(jù)監(jiān)測研究報(bào)告
- 2024至2030年中國丙綸加彈絲數(shù)據(jù)監(jiān)測研究報(bào)告
- 2024年中國隔離開關(guān)熔斷器組市場調(diào)查研究報(bào)告
- 2024年中國脆碎度測試儀市場調(diào)查研究報(bào)告
- 2024年中國收錄機(jī)壓帶輪市場調(diào)查研究報(bào)告
- 2024年中國伸縮門配件市場調(diào)查研究報(bào)告
- 2024年中國原味奶茶市場調(diào)查研究報(bào)告
- T∕CREA 005-2021 老年人照料設(shè)施與適老居住建筑部品體系標(biāo)準(zhǔn)
- BlueCat核心服務(wù)保障專家
- 綠樹成蔭(帶意大利文)簡譜五線譜鋼琴譜正譜.pdf.docx
- 最新蘇教版小學(xué)信息技術(shù)六年級(jí)上冊(cè)教案機(jī)器人教案
- Minitab全面培訓(xùn)教程(最新完整版)
- 配電箱(柜)技術(shù)協(xié)議書范本
- 外研三起五年級(jí)上冊(cè)英語Module10-Unit-1-He-was-in-the-kitchen教案
- 水的組成教學(xué)設(shè)計(jì)
- 刑釋解教人員重新違法犯罪情況的調(diào)查分析及預(yù)防對(duì)策
- 茶文化ppt英文版
- 導(dǎo)管室工作總結(jié)(共4篇)
評(píng)論
0/150
提交評(píng)論