




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
編譯原理和技術(shù)編譯原理和技術(shù)編譯原理課程在計(jì)算機(jī)科學(xué)技術(shù)中的地位:程序設(shè)計(jì)語言離散數(shù)學(xué)數(shù)據(jù)結(jié)構(gòu)編譯原理操作系統(tǒng)系統(tǒng)軟件應(yīng)用軟件軟件工程信息系統(tǒng)電子商務(wù)編譯原理課程在計(jì)算機(jī)科學(xué)技術(shù)中的地位:程序設(shè)計(jì)語言離散數(shù)學(xué)數(shù)課程簡介編譯理論與方法計(jì)算機(jī)科學(xué)與技術(shù)中理論和實(shí)踐相結(jié)合的最好典范
ACM圖靈獎,授予在計(jì)算機(jī)技術(shù)領(lǐng)域作出突出貢獻(xiàn)的科學(xué)家程序設(shè)計(jì)語言、編譯理論與方法約占1/3課程簡介編譯理論與方法課程簡介課程內(nèi)容介紹編譯器構(gòu)造的一般原理和基本實(shí)現(xiàn)方法介紹的理論知識:形式語言和自動機(jī)理論、語法制導(dǎo)的定義和屬性文法、類型論等課程特點(diǎn)強(qiáng)調(diào)形式化描述技術(shù)強(qiáng)調(diào)對編譯原理和技術(shù)的宏觀理解,不把注意力分散到枝節(jié)算法,不偏向于某種源語言或目標(biāo)機(jī)器課程簡介課程內(nèi)容課程簡介學(xué)習(xí)的意義它是計(jì)算機(jī)專業(yè)的核心課程。對編程語言的設(shè)計(jì)和實(shí)現(xiàn)有深刻的理解,有利于學(xué)習(xí)編程語言,知其然知其所以然。if(c==5)then…if(c=5)then…if(5==c)then…if(5=c)then…編譯器不報(bào)錯,但實(shí)際上錯了編譯器報(bào)錯課程簡介學(xué)習(xí)的意義if(c==5)then…課程簡介學(xué)習(xí)的意義從軟件工程看,編譯器是一個很好的實(shí)例(基本設(shè)計(jì)、模塊劃分等),所介紹的概念和技術(shù)能應(yīng)用到一般的軟件設(shè)計(jì)之中。編譯器也許是大家在本科階段分析最透徹的實(shí)例了。從本課程的學(xué)習(xí)也能了解到軟件工程中的一些技術(shù)(如基于事件驅(qū)動的編程)。本課程所介紹的概念和技術(shù)能應(yīng)用到一般的軟件設(shè)計(jì)之中。
大多數(shù)程序員同時是語言的設(shè)計(jì)者,雖然是一些簡單的語言(如輸入輸出),本課程的學(xué)習(xí)有助于提高對這些語言的設(shè)計(jì)水平。課程簡介學(xué)習(xí)的意義課程簡介學(xué)習(xí)的意義可以肯定地說,你們中的95%以上的人在一輩子的生涯中都沒有機(jī)會去實(shí)現(xiàn)一個真正的復(fù)雜語言的編譯器。但是每一個人都絕對遇到需要使用編譯技術(shù)的項(xiàng)目。 以下就是一些小的“編譯器”.課程簡介學(xué)習(xí)的意義課程簡介學(xué)習(xí)的意義普通計(jì)算器可編程計(jì)算器課程簡介學(xué)習(xí)的意義普通計(jì)算器可編程計(jì)算器課程簡介學(xué)習(xí)的意義自動聊天機(jī)器人課程簡介學(xué)習(xí)的意義自動聊天機(jī)器人課程簡介學(xué)習(xí)的意義各種數(shù)據(jù)庫查詢語言及專家系統(tǒng)select課程fromtable課程表where任課老師=賈棋課程簡介學(xué)習(xí)的意義各種數(shù)據(jù)庫查詢語言及專家系統(tǒng)sele課程簡介學(xué)習(xí)的意義在計(jì)算機(jī)專業(yè)考研或者各大公司招聘時,必考內(nèi)容。在x86/Linux工作站上,以下兩個結(jié)構(gòu)的size分別是20和16,為什么不一樣?typedefstruct_a{ typedefstruct_b{ char c1; charc1; long i; char c2; char c2; longi; doublef; doublef;}a; }b;課程簡介學(xué)習(xí)的意義在x86/Linux工作站上,以下兩vc結(jié)果vsLinux下gcc的結(jié)果vc結(jié)果vsLinux下gcc的結(jié)果vc6中的編譯選項(xiàng)有/Zp[1|2|4|8|16],/Zp1表示以1字節(jié)邊界對齊,相應(yīng)的,/Zpn表示以n字節(jié)邊界對齊。n字節(jié)邊界對齊的意思是說,一個成員的地址必須安排在成員的尺寸的整數(shù)倍地址上或者是n的整數(shù)倍地址上,取它們中的最小值。要使用這個選項(xiàng),可以在vc6中打開工程屬性頁,c/c++頁,選擇CodeGeneration分類,在Structmemberalignment可以選擇。vc6中的編譯選項(xiàng)有/Zp[1|2|4|8|16],/Z第一章引論
翻譯器:把一種語言變換到另外一種語言的軟件。這兩種語言分別稱為源語言和目標(biāo)語言。編譯器:一種翻譯器,它的目標(biāo)語言比源語言低級。第一章引論翻譯器:把一種語言變換到另外一種第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器編譯器編譯器從邏輯上可以分成若干階段,每個階段把源程序從一種表示變換成另一種表示翻譯家詞法分析語法分析語義分析漢語文本英語文本生成英語文本改進(jìn)日語文本生成日語文本出錯紀(jì)錄詞典第一章引論詞法分析器語法分析器語義分析器源第一章引論FORTRAN(FORmulaTRANslation)
第一個實(shí)用的高級語言擅長于數(shù)學(xué)函數(shù)運(yùn)算常用于科學(xué)計(jì)算中第一個編譯器歷史上第一個實(shí)用的編譯器(JohnBackus):FortrancompilerfortheIBM704/709/7090/7094
JohnBackus,引入了編譯器的“階段”或稱為“遍”的概念,是編譯設(shè)計(jì)的模塊化的開始第一章引論FORTRAN(FORmula編譯器從邏輯上可以分成若干階段每個階段把源程序從一種表示變換成另一種表示本章通過描述編譯器的各個階段來介紹編譯這個課題編譯器從邏輯上可以分成若干階段第一章引論
符號表
positioninitialrate.........123詞典你們大工學(xué)子.........123詞法分析名詞1
動詞形容詞名詞2你們是優(yōu)秀的大工學(xué)子。詞法分析:源程序-〉詞法記號(token)流詞法分析器id,1
=
id,2
+
id,3
60position=initial+rate60第一章引論符號表positioninit第一章引論
任何一個標(biāo)識符都是表達(dá)式;任何一個數(shù)都是表達(dá)式;如果e1和e2都是表達(dá)式,那么
e1+e2e1
*
e2(e1)也都是表達(dá)式表達(dá)式表達(dá)式表達(dá)式標(biāo)識符表達(dá)式表達(dá)式(initial)標(biāo)識符(rate)數(shù)(60)*+語法分析:詞法記號(token)流-〉語法短語任何名詞都可以作賓語;如果e1和e2都是賓語,那么
e1和e2e1
與e2也都可以作賓語如果e1是定語,e2是賓語,那么e1e2也可以作賓語。賓語定語賓語形容詞(優(yōu)秀的)名詞(大工學(xué)子)第一章引論任何一個標(biāo)識符都是表達(dá)式;表達(dá)式第一章引論
語法分析器id,1
=
id,2
+
id,3
60:=+*60id1id2id3語法分析:詞法記號(token)流-〉語法短語名詞1動詞形容詞名詞2語法分析(優(yōu)秀的)名詞(大工學(xué)子)賓語定語賓語形容詞語句謂語動詞(是)主語名詞(你們)符號表
positioninitialrate.........123詞典你們大工學(xué)子.........123第一章引論語法分析器id,1=第一章引論
語義分析器:=+*60id1id2id3:=+*60id1id2id3inttoreal語義分析:檢查程序的語義正確性,如類型檢查等你們是優(yōu)秀的大工學(xué)子你們是一個優(yōu)秀的大工學(xué)子。第一章引論語義分析器:=+*60id1id第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器
前三個階段完成對源程序的分析第一章引論詞法分析器語法分析器語義分析器源第一章引論
中間代碼生成器temp1:=inttoreal(60)temp2:=id3*temp1temp3:=id2+temp2id1:=temp3:=+*60id1id2id3inttoreal(優(yōu)秀的)名詞(大工學(xué)子)賓語定語賓語形容詞語句謂語動詞(是)主語名詞(你們)英語文本生成YouaregoodDLUTers.第一章引論中間代碼生成器temp1:=第一章引論
代碼優(yōu)化器temp1:=inttoreal(60)temp2:=id3*temp1temp3:=id2+temp2id1:=temp3temp1:=id3*60.0id1:=id2+temp1YouaregoodDLUTers.英語文本改進(jìn)Youareexcellent
DLUTers第一章引論代碼優(yōu)化器temp1:=in第一章引論
temp1:=id3*60.0id1:=id2+temp1代碼生成器MOVFid3,R2MULF#60.0,R2MOVFid2,R1ADDFR2,R1MOVFR1,id1日語文本生成Youareexcellent
DLUTers君たちは大連理工大學(xué)の優(yōu)秀な學(xué)生なんです。第一章引論temp1:=id3*6第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器
后三個階段對源程序進(jìn)行綜合第一章引論詞法分析器語法分析器語義分析器源第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器
第一章引論詞法分析器語法分析器語義分析器源分析和綜合:把編譯過程分成分析和綜合兩步分析:分析源程序以計(jì)算其特性所涉及到的操作(詞法分析、語法分析、語義分析)綜合:生成目標(biāo)代碼時所涉及到的操作(中間代碼生成、代碼優(yōu)化、代碼生成)輔助:符號表管理、出錯處理8項(xiàng)功能對應(yīng)8個模塊。第一章引論分析和綜合:第一章引論第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器
前端后端前端:依賴于源語言,獨(dú)立于目標(biāo)機(jī)器。后端:依賴于目標(biāo)機(jī)器,獨(dú)立于源語言。第一章引論詞法分析器語法分析器語義分析器源前端和后端:把編譯過程分成前端和后端兩部分前端:只依賴于源程序,獨(dú)立于目標(biāo)機(jī)器 (生成中間代碼)后端:依賴于目標(biāo)機(jī)器,與源程序無關(guān),只與中間語言有關(guān)(從中間代碼生成目標(biāo)代碼)好處:提高開發(fā)編譯器的效率取一個編譯器的前端,重寫它的后端以產(chǎn)生同一源語言在另一機(jī)器上的編譯器不同的前端使用同一個后端,從而得到一個機(jī)器上的幾個編譯器(采用同一中間語言)第一章引論前端和后端:第一章引論第一章引論
源程序目標(biāo)機(jī)器1目標(biāo)機(jī)器2目標(biāo)機(jī)器3目標(biāo)機(jī)器n編譯器不區(qū)分前端和后端的編譯器源程序目標(biāo)機(jī)器1目標(biāo)機(jī)器2目標(biāo)機(jī)器3目標(biāo)機(jī)器n編譯器前端編譯器后端區(qū)分前端和后端的編譯器第一章引論源程序目標(biāo)機(jī)器1目標(biāo)機(jī)器2目標(biāo)機(jī)第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器遍編譯的幾個階段常用一遍(pass)掃描實(shí)現(xiàn),一遍掃描包括讀一個輸入文件和寫一個輸出文件。第一章引論詞法分析器語法分析器語義分析器源第一章引論
遍類比:刷墻藝術(shù)中的“遍”的概念網(wǎng)線水泥瓷磚任務(wù):在一面墻上布置網(wǎng)線,并粉刷水泥,然后貼上瓷磚第一章引論遍類比:刷墻藝術(shù)中的“遍”的概念第一章引論
遍類比:刷墻藝術(shù)中的“遍”的概念方法一:第一遍:布上全部網(wǎng)線網(wǎng)線水泥瓷磚第一章引論遍類比:刷墻藝術(shù)中的“遍”的概念第一章引論
遍類比:刷墻藝術(shù)中的“遍”的概念方法一:第二遍:粉刷全部墻面的水泥網(wǎng)線水泥瓷磚第一章引論遍類比:刷墻藝術(shù)中的“遍”的概念第一章引論
遍類比:刷墻藝術(shù)中的“遍”的概念方法一:第三遍:給整個墻面貼上瓷磚網(wǎng)線水泥瓷磚第一章引論遍類比:刷墻藝術(shù)中的“遍”的概念第一章引論
遍類比:刷墻藝術(shù)中的“遍”的概念方法二:一遍:一邊布網(wǎng)線,一邊粉刷水泥,一邊貼瓷磚網(wǎng)線水泥瓷磚第一章引論遍類比:刷墻藝術(shù)中的“遍”的概念遍(趟):一遍或一趟:是指編譯程序在編譯時刻把源程序或源程序的等價物(中間程序)從頭到尾掃描一遍并轉(zhuǎn)換成另一緊鄰的等價物的全過程。單遍掃描與多遍掃描:每一遍的掃視可完成上述一個階段或多個階段的工作。每一遍的輸入都是上一遍的輸出,第一遍的輸入是源程序正文,最后一遍的輸出是目標(biāo)代碼。單遍與多遍的比較:遍數(shù)多:編譯器結(jié)構(gòu)清晰,但時間效率不高遍數(shù)少:編譯速度快,但對機(jī)器的內(nèi)存要求高遍數(shù)的確定:主要因素是源程序和機(jī)器(目標(biāo)機(jī))的特征。第一章引論遍(趟):第一章引論另一種實(shí)現(xiàn)形式編譯技術(shù)研究對象:編譯器的構(gòu)造與分析編輯器源程序編譯器操作系統(tǒng)可執(zhí)行程序.exe解釋器中間代碼可執(zhí)行程序.exeC,C++,Pascal,Delphi,VC,BCJava,VB,BasicEdit,Word,Notepad,Vigcc,vc,bc31虛擬機(jī)集成開發(fā)環(huán)境另一種實(shí)現(xiàn)形式編譯技術(shù)研究對象:編譯器的構(gòu)造與分析編輯器源程BASIC年代的解釋器功能:它將高級語言的源程序翻譯成一種中間語言程序,然后對中間語言程序進(jìn)行解釋執(zhí)行在那個年代,編譯和解釋兩個功能是合在一個程序中,該程序被稱為解釋器Java年代的解釋器解釋器的上述兩個功能分在兩個程序中前一個叫做編譯器,它把源程序翻譯成一種叫做字節(jié)碼的中間語言程序后一個叫做解釋器,它對字節(jié)碼程序進(jìn)行解釋執(zhí)行BASIC年代的解釋器編譯器和解釋器的區(qū)別三種奶牛三種嗜好編譯器和解釋器的區(qū)別三種奶牛三種嗜好編譯器和解釋器的區(qū)別改進(jìn)后的方案編譯器和解釋器的區(qū)別改進(jìn)后的方案編譯器和解釋器的區(qū)別牧草=我們的各種編程語言,C/C++/C#,Java,Pascal,PHP,Perl,JavaScript等
切割機(jī)=各種編譯器
奶牛=各種CPU,比如x86,ARM,MIPS等
奶牛會有吃不同形狀牧草的嗜好,這個奇怪的比喻是為了表示不同的CPU接受的不同的機(jī)器語言。編譯器和解釋器的區(qū)別牧草=我們的各種編程語言,C/C++編譯器和解釋器的區(qū)別編譯器和解釋器的區(qū)別編譯器與解釋器的區(qū)別編譯器是把源程序的每一條語句都編譯成機(jī)器語言,并保存成二進(jìn)制文件,這樣運(yùn)行時計(jì)算機(jī)可以直接以機(jī)器語言來運(yùn)行此程序,速度很快;而解釋器則是只在執(zhí)行程序時,才一條一條的解釋成機(jī)器語言給計(jì)算機(jī)來執(zhí)行,所以運(yùn)行速度是不如編譯后的程序運(yùn)行的快的.編譯器與解釋器的區(qū)別編譯器是把源程序的每一條語句都編譯成機(jī)器1.2編譯器技術(shù)的應(yīng)用
高級語言的實(shí)現(xiàn)高級編程語言易于編程,但程序運(yùn)行較慢低級語言編程時可實(shí)施更有效的控制方式,得到更有效的代碼,但難編寫、易出錯、難維護(hù)流行編程語言的大多數(shù)演變都是朝著提高抽象級別的方向每一輪編程語言新特征的出現(xiàn)都刺激編譯器優(yōu)化的新研究1.2編譯器技術(shù)的應(yīng)用高級語言的實(shí)現(xiàn)編程語言演義編程語言機(jī)器語言匯編語言高級語言(Fortran,C,Java,…)編程語言演義編程語言編程語言演義機(jī)器語言特點(diǎn)0,1串打卡輸入c70600000002movx,c其中符號x的地址是0000,c=2計(jì)算機(jī)可以直接理解機(jī)器語言程序機(jī)器語言缺點(diǎn)可讀性差可維護(hù)性差機(jī)器語言匯編語言高級語言編程語言演義機(jī)器語言特點(diǎn)機(jī)器語言編程語言演義匯編語言形式movx,2c70600000002變量x的地址可以由匯編器維護(hù),而不需要固定到某個絕對地址機(jī)器語言匯編語言高級語言編程語言演義匯編語言形式機(jī)器語言編程語言演義高級語言形式賦值語句:x=2貼近人類思維方式,貼近實(shí)際問題描述形式計(jì)算機(jī)無法直接理解需要編譯器輔助,將其轉(zhuǎn)換為機(jī)器語言形式機(jī)器語言匯編語言高級語言編程語言演義高級語言形式機(jī)器語言1.2編譯器技術(shù)的應(yīng)用
高級語言的實(shí)現(xiàn) 每一輪編程語言新特征的出現(xiàn)都刺激編譯器優(yōu)化的新研究支持用戶定義的聚合數(shù)據(jù)類型和高級控制流,如數(shù)組和記錄、循環(huán)和過程調(diào)用:C、Fortran面向?qū)ο蟮闹饕拍钍菙?shù)據(jù)抽象和性質(zhì)繼承,使得程序更加模塊化并易于維護(hù):Smalltalk、C++、C#、Java類型安全的語言:Java沒有指針,也不允許指針?biāo)阈g(shù)。它用無用單元收集機(jī)制來自動地釋放那些不再使用的變量占據(jù)的內(nèi)存1.2編譯器技術(shù)的應(yīng)用高級語言的實(shí)現(xiàn)1.2編譯器技術(shù)的應(yīng)用
針對計(jì)算機(jī)體系結(jié)構(gòu)的優(yōu)化計(jì)算機(jī)體系結(jié)構(gòu)的迅速演化引起對新的編譯器技術(shù)一種不知足的需要并行化
編譯器重新整理指令,使得指令級并行更有效
編譯器從傳統(tǒng)的串行程序自動生成并行代碼,使之運(yùn)行于多處理器上內(nèi)存分層
編譯器優(yōu)化歷來集中在優(yōu)化處理器的執(zhí)行上,但是現(xiàn)在更強(qiáng)調(diào)要使內(nèi)存分層更有效1.2編譯器技術(shù)的應(yīng)用針對計(jì)算機(jī)體系結(jié)構(gòu)的優(yōu)化1.2編譯器技術(shù)的應(yīng)用
新計(jì)算機(jī)體系結(jié)構(gòu)的設(shè)計(jì)現(xiàn)在計(jì)算機(jī)系統(tǒng)的性能不僅僅取決于它的原始速度,還取決于編譯器是否能生成充分利用其特征的代碼在現(xiàn)代計(jì)算機(jī)體系結(jié)構(gòu)的研究中,在處理器的設(shè)計(jì)階段就開發(fā)編譯器,并將編譯生成的代碼在模擬器上運(yùn)行,以評價擬采用體系結(jié)構(gòu)的特征編譯器技術(shù)影響計(jì)算機(jī)體系結(jié)構(gòu)設(shè)計(jì)的一個著名例子是精簡指令集計(jì)算機(jī)(RISC)的發(fā)明1.2編譯器技術(shù)的應(yīng)用新計(jì)算機(jī)體系結(jié)構(gòu)的設(shè)計(jì)1.2編譯器技術(shù)的應(yīng)用
程序翻譯二進(jìn)制翻譯
編譯器技術(shù)可用于把一種機(jī)器的二進(jìn)制代碼翻譯成另一種機(jī)器的代碼,以運(yùn)行原先為別的指令集編譯的代碼數(shù)據(jù)庫查詢解釋器
數(shù)據(jù)庫查詢由一些謂詞組成,這些謂詞由包含關(guān)系運(yùn)算的布爾表達(dá)式組成,可以被解釋執(zhí)行,也可以被編譯成搜索數(shù)據(jù)庫的命令1.2編譯器技術(shù)的應(yīng)用程序翻譯1.2編譯器技術(shù)的應(yīng)用
提高軟件開發(fā)效率的工具 源于編譯器中代碼優(yōu)化技術(shù)的程序分析一直在改進(jìn)軟件開發(fā)效率類型檢查
類型檢查是一種捕捉程序中前后不一致的成熟而有效的技術(shù)邊界檢查
數(shù)據(jù)流分析技術(shù)可用來定位緩沖區(qū)溢出內(nèi)存管理
自動的內(nèi)存管理刪除內(nèi)存泄漏等內(nèi)存管理錯誤1.2編譯器技術(shù)的應(yīng)用提高軟件開發(fā)效率的工具小結(jié)編譯原理的內(nèi)容及學(xué)習(xí)意義翻譯器、編譯器的定義編譯器的階段劃分及前端、后端的概念“遍”的概念小結(jié)編譯原理的內(nèi)容及學(xué)習(xí)意義作業(yè)習(xí)題1:1.1,1.2(編譯器與解釋器的區(qū)別是什么)每周第一次課交作業(yè)!課件下載地址:bianyi_jiaqi@163.com密碼:bianyi作業(yè)習(xí)題1:1.1,1.2(編譯器與解釋器的區(qū)別是什么)編譯原理和技術(shù)編譯原理和技術(shù)編譯原理課程在計(jì)算機(jī)科學(xué)技術(shù)中的地位:程序設(shè)計(jì)語言離散數(shù)學(xué)數(shù)據(jù)結(jié)構(gòu)編譯原理操作系統(tǒng)系統(tǒng)軟件應(yīng)用軟件軟件工程信息系統(tǒng)電子商務(wù)編譯原理課程在計(jì)算機(jī)科學(xué)技術(shù)中的地位:程序設(shè)計(jì)語言離散數(shù)學(xué)數(shù)課程簡介編譯理論與方法計(jì)算機(jī)科學(xué)與技術(shù)中理論和實(shí)踐相結(jié)合的最好典范
ACM圖靈獎,授予在計(jì)算機(jī)技術(shù)領(lǐng)域作出突出貢獻(xiàn)的科學(xué)家程序設(shè)計(jì)語言、編譯理論與方法約占1/3課程簡介編譯理論與方法課程簡介課程內(nèi)容介紹編譯器構(gòu)造的一般原理和基本實(shí)現(xiàn)方法介紹的理論知識:形式語言和自動機(jī)理論、語法制導(dǎo)的定義和屬性文法、類型論等課程特點(diǎn)強(qiáng)調(diào)形式化描述技術(shù)強(qiáng)調(diào)對編譯原理和技術(shù)的宏觀理解,不把注意力分散到枝節(jié)算法,不偏向于某種源語言或目標(biāo)機(jī)器課程簡介課程內(nèi)容課程簡介學(xué)習(xí)的意義它是計(jì)算機(jī)專業(yè)的核心課程。對編程語言的設(shè)計(jì)和實(shí)現(xiàn)有深刻的理解,有利于學(xué)習(xí)編程語言,知其然知其所以然。if(c==5)then…if(c=5)then…if(5==c)then…if(5=c)then…編譯器不報(bào)錯,但實(shí)際上錯了編譯器報(bào)錯課程簡介學(xué)習(xí)的意義if(c==5)then…課程簡介學(xué)習(xí)的意義從軟件工程看,編譯器是一個很好的實(shí)例(基本設(shè)計(jì)、模塊劃分等),所介紹的概念和技術(shù)能應(yīng)用到一般的軟件設(shè)計(jì)之中。編譯器也許是大家在本科階段分析最透徹的實(shí)例了。從本課程的學(xué)習(xí)也能了解到軟件工程中的一些技術(shù)(如基于事件驅(qū)動的編程)。本課程所介紹的概念和技術(shù)能應(yīng)用到一般的軟件設(shè)計(jì)之中。
大多數(shù)程序員同時是語言的設(shè)計(jì)者,雖然是一些簡單的語言(如輸入輸出),本課程的學(xué)習(xí)有助于提高對這些語言的設(shè)計(jì)水平。課程簡介學(xué)習(xí)的意義課程簡介學(xué)習(xí)的意義可以肯定地說,你們中的95%以上的人在一輩子的生涯中都沒有機(jī)會去實(shí)現(xiàn)一個真正的復(fù)雜語言的編譯器。但是每一個人都絕對遇到需要使用編譯技術(shù)的項(xiàng)目。 以下就是一些小的“編譯器”.課程簡介學(xué)習(xí)的意義課程簡介學(xué)習(xí)的意義普通計(jì)算器可編程計(jì)算器課程簡介學(xué)習(xí)的意義普通計(jì)算器可編程計(jì)算器課程簡介學(xué)習(xí)的意義自動聊天機(jī)器人課程簡介學(xué)習(xí)的意義自動聊天機(jī)器人課程簡介學(xué)習(xí)的意義各種數(shù)據(jù)庫查詢語言及專家系統(tǒng)select課程fromtable課程表where任課老師=賈棋課程簡介學(xué)習(xí)的意義各種數(shù)據(jù)庫查詢語言及專家系統(tǒng)sele課程簡介學(xué)習(xí)的意義在計(jì)算機(jī)專業(yè)考研或者各大公司招聘時,必考內(nèi)容。在x86/Linux工作站上,以下兩個結(jié)構(gòu)的size分別是20和16,為什么不一樣?typedefstruct_a{ typedefstruct_b{ char c1; charc1; long i; char c2; char c2; longi; doublef; doublef;}a; }b;課程簡介學(xué)習(xí)的意義在x86/Linux工作站上,以下兩vc結(jié)果vsLinux下gcc的結(jié)果vc結(jié)果vsLinux下gcc的結(jié)果vc6中的編譯選項(xiàng)有/Zp[1|2|4|8|16],/Zp1表示以1字節(jié)邊界對齊,相應(yīng)的,/Zpn表示以n字節(jié)邊界對齊。n字節(jié)邊界對齊的意思是說,一個成員的地址必須安排在成員的尺寸的整數(shù)倍地址上或者是n的整數(shù)倍地址上,取它們中的最小值。要使用這個選項(xiàng),可以在vc6中打開工程屬性頁,c/c++頁,選擇CodeGeneration分類,在Structmemberalignment可以選擇。vc6中的編譯選項(xiàng)有/Zp[1|2|4|8|16],/Z第一章引論
翻譯器:把一種語言變換到另外一種語言的軟件。這兩種語言分別稱為源語言和目標(biāo)語言。編譯器:一種翻譯器,它的目標(biāo)語言比源語言低級。第一章引論翻譯器:把一種語言變換到另外一種第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器編譯器編譯器從邏輯上可以分成若干階段,每個階段把源程序從一種表示變換成另一種表示翻譯家詞法分析語法分析語義分析漢語文本英語文本生成英語文本改進(jìn)日語文本生成日語文本出錯紀(jì)錄詞典第一章引論詞法分析器語法分析器語義分析器源第一章引論FORTRAN(FORmulaTRANslation)
第一個實(shí)用的高級語言擅長于數(shù)學(xué)函數(shù)運(yùn)算常用于科學(xué)計(jì)算中第一個編譯器歷史上第一個實(shí)用的編譯器(JohnBackus):FortrancompilerfortheIBM704/709/7090/7094
JohnBackus,引入了編譯器的“階段”或稱為“遍”的概念,是編譯設(shè)計(jì)的模塊化的開始第一章引論FORTRAN(FORmula編譯器從邏輯上可以分成若干階段每個階段把源程序從一種表示變換成另一種表示本章通過描述編譯器的各個階段來介紹編譯這個課題編譯器從邏輯上可以分成若干階段第一章引論
符號表
positioninitialrate.........123詞典你們大工學(xué)子.........123詞法分析名詞1
動詞形容詞名詞2你們是優(yōu)秀的大工學(xué)子。詞法分析:源程序-〉詞法記號(token)流詞法分析器id,1
=
id,2
+
id,3
60position=initial+rate60第一章引論符號表positioninit第一章引論
任何一個標(biāo)識符都是表達(dá)式;任何一個數(shù)都是表達(dá)式;如果e1和e2都是表達(dá)式,那么
e1+e2e1
*
e2(e1)也都是表達(dá)式表達(dá)式表達(dá)式表達(dá)式標(biāo)識符表達(dá)式表達(dá)式(initial)標(biāo)識符(rate)數(shù)(60)*+語法分析:詞法記號(token)流-〉語法短語任何名詞都可以作賓語;如果e1和e2都是賓語,那么
e1和e2e1
與e2也都可以作賓語如果e1是定語,e2是賓語,那么e1e2也可以作賓語。賓語定語賓語形容詞(優(yōu)秀的)名詞(大工學(xué)子)第一章引論任何一個標(biāo)識符都是表達(dá)式;表達(dá)式第一章引論
語法分析器id,1
=
id,2
+
id,3
60:=+*60id1id2id3語法分析:詞法記號(token)流-〉語法短語名詞1動詞形容詞名詞2語法分析(優(yōu)秀的)名詞(大工學(xué)子)賓語定語賓語形容詞語句謂語動詞(是)主語名詞(你們)符號表
positioninitialrate.........123詞典你們大工學(xué)子.........123第一章引論語法分析器id,1=第一章引論
語義分析器:=+*60id1id2id3:=+*60id1id2id3inttoreal語義分析:檢查程序的語義正確性,如類型檢查等你們是優(yōu)秀的大工學(xué)子你們是一個優(yōu)秀的大工學(xué)子。第一章引論語義分析器:=+*60id1id第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器
前三個階段完成對源程序的分析第一章引論詞法分析器語法分析器語義分析器源第一章引論
中間代碼生成器temp1:=inttoreal(60)temp2:=id3*temp1temp3:=id2+temp2id1:=temp3:=+*60id1id2id3inttoreal(優(yōu)秀的)名詞(大工學(xué)子)賓語定語賓語形容詞語句謂語動詞(是)主語名詞(你們)英語文本生成YouaregoodDLUTers.第一章引論中間代碼生成器temp1:=第一章引論
代碼優(yōu)化器temp1:=inttoreal(60)temp2:=id3*temp1temp3:=id2+temp2id1:=temp3temp1:=id3*60.0id1:=id2+temp1YouaregoodDLUTers.英語文本改進(jìn)Youareexcellent
DLUTers第一章引論代碼優(yōu)化器temp1:=in第一章引論
temp1:=id3*60.0id1:=id2+temp1代碼生成器MOVFid3,R2MULF#60.0,R2MOVFid2,R1ADDFR2,R1MOVFR1,id1日語文本生成Youareexcellent
DLUTers君たちは大連理工大學(xué)の優(yōu)秀な學(xué)生なんです。第一章引論temp1:=id3*6第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器
后三個階段對源程序進(jìn)行綜合第一章引論詞法分析器語法分析器語義分析器源第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器
第一章引論詞法分析器語法分析器語義分析器源分析和綜合:把編譯過程分成分析和綜合兩步分析:分析源程序以計(jì)算其特性所涉及到的操作(詞法分析、語法分析、語義分析)綜合:生成目標(biāo)代碼時所涉及到的操作(中間代碼生成、代碼優(yōu)化、代碼生成)輔助:符號表管理、出錯處理8項(xiàng)功能對應(yīng)8個模塊。第一章引論分析和綜合:第一章引論第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器
前端后端前端:依賴于源語言,獨(dú)立于目標(biāo)機(jī)器。后端:依賴于目標(biāo)機(jī)器,獨(dú)立于源語言。第一章引論詞法分析器語法分析器語義分析器源前端和后端:把編譯過程分成前端和后端兩部分前端:只依賴于源程序,獨(dú)立于目標(biāo)機(jī)器 (生成中間代碼)后端:依賴于目標(biāo)機(jī)器,與源程序無關(guān),只與中間語言有關(guān)(從中間代碼生成目標(biāo)代碼)好處:提高開發(fā)編譯器的效率取一個編譯器的前端,重寫它的后端以產(chǎn)生同一源語言在另一機(jī)器上的編譯器不同的前端使用同一個后端,從而得到一個機(jī)器上的幾個編譯器(采用同一中間語言)第一章引論前端和后端:第一章引論第一章引論
源程序目標(biāo)機(jī)器1目標(biāo)機(jī)器2目標(biāo)機(jī)器3目標(biāo)機(jī)器n編譯器不區(qū)分前端和后端的編譯器源程序目標(biāo)機(jī)器1目標(biāo)機(jī)器2目標(biāo)機(jī)器3目標(biāo)機(jī)器n編譯器前端編譯器后端區(qū)分前端和后端的編譯器第一章引論源程序目標(biāo)機(jī)器1目標(biāo)機(jī)器2目標(biāo)機(jī)第一章引論
詞法分析器語法分析器語義分析器源程序中間代碼生成器代碼優(yōu)化器代碼生成器目標(biāo)程序出錯管理器符號表管理器遍編譯的幾個階段常用一遍(pass)掃描實(shí)現(xiàn),一遍掃描包括讀一個輸入文件和寫一個輸出文件。第一章引論詞法分析器語法分析器語義分析器源第一章引論
遍類比:刷墻藝術(shù)中的“遍”的概念網(wǎng)線水泥瓷磚任務(wù):在一面墻上布置網(wǎng)線,并粉刷水泥,然后貼上瓷磚第一章引論遍類比:刷墻藝術(shù)中的“遍”的概念第一章引論
遍類比:刷墻藝術(shù)中的“遍”的概念方法一:第一遍:布上全部網(wǎng)線網(wǎng)線水泥瓷磚第一章引論遍類比:刷墻藝術(shù)中的“遍”的概念第一章引論
遍類比:刷墻藝術(shù)中的“遍”的概念方法一:第二遍:粉刷全部墻面的水泥網(wǎng)線水泥瓷磚第一章引論遍類比:刷墻藝術(shù)中的“遍”的概念第一章引論
遍類比:刷墻藝術(shù)中的“遍”的概念方法一:第三遍:給整個墻面貼上瓷磚網(wǎng)線水泥瓷磚第一章引論遍類比:刷墻藝術(shù)中的“遍”的概念第一章引論
遍類比:刷墻藝術(shù)中的“遍”的概念方法二:一遍:一邊布網(wǎng)線,一邊粉刷水泥,一邊貼瓷磚網(wǎng)線水泥瓷磚第一章引論遍類比:刷墻藝術(shù)中的“遍”的概念遍(趟):一遍或一趟:是指編譯程序在編譯時刻把源程序或源程序的等價物(中間程序)從頭到尾掃描一遍并轉(zhuǎn)換成另一緊鄰的等價物的全過程。單遍掃描與多遍掃描:每一遍的掃視可完成上述一個階段或多個階段的工作。每一遍的輸入都是上一遍的輸出,第一遍的輸入是源程序正文,最后一遍的輸出是目標(biāo)代碼。單遍與多遍的比較:遍數(shù)多:編譯器結(jié)構(gòu)清晰,但時間效率不高遍數(shù)少:編譯速度快,但對機(jī)器的內(nèi)存要求高遍數(shù)的確定:主要因素是源程序和機(jī)器(目標(biāo)機(jī))的特征。第一章引論遍(趟):第一章引論另一種實(shí)現(xiàn)形式編譯技術(shù)研究對象:編譯器的構(gòu)造與分析編輯器源程序編譯器操作系統(tǒng)可執(zhí)行程序.exe解釋器中間代碼可執(zhí)行程序.exeC,C++,Pascal,Delphi,VC,BCJava,VB,BasicEdit,Word,Notepad,Vigcc,vc,bc31虛擬機(jī)集成開發(fā)環(huán)境另一種實(shí)現(xiàn)形式編譯技術(shù)研究對象:編譯器的構(gòu)造與分析編輯器源程BASIC年代的解釋器功能:它將高級語言的源程序翻譯成一種中間語言程序,然后對中間語言程序進(jìn)行解釋執(zhí)行在那個年代,編譯和解釋兩個功能是合在一個程序中,該程序被稱為解釋器Java年代的解釋器解釋器的上述兩個功能分在兩個程序中前一個叫做編譯器,它把源程序翻譯成一種叫做字節(jié)碼的中間語言程序后一個叫做解釋器,它對字節(jié)碼程序進(jìn)行解釋執(zhí)行BASIC年代的解釋器編譯器和解釋器的區(qū)別三種奶牛三種嗜好編譯器和解釋器的區(qū)別三種奶牛三種嗜好編譯器和解釋器的區(qū)別改進(jìn)后的方案編譯器和解釋器的區(qū)別改進(jìn)后的方案編譯器和解釋器的區(qū)別牧草=我們的各種編程語言,C/C++/C#,Java,Pascal,PHP,Perl,JavaScript等
切割機(jī)=各種編譯器
奶牛=各種CPU,比如x86,ARM,MIPS等
奶牛會有吃不同形狀牧草的嗜好,這個奇怪的比喻是為了表示不同的CPU接受的不同的機(jī)器語言。編譯器和解釋器的區(qū)別牧草=我們的各種編程語言,C/C++編譯器和解釋器的區(qū)別編譯器和解釋器的區(qū)別編譯器與解釋器的區(qū)別編譯器是把源程序的每一條語句都編譯成機(jī)器語言,并保存成二進(jìn)制文件,這樣運(yùn)行時計(jì)算機(jī)可以直接以機(jī)器語言來運(yùn)行此程序,速度很快;而解釋器則是只在執(zhí)行程序時,才一條一條的解釋成機(jī)器語言給計(jì)算機(jī)來執(zhí)行,所以運(yùn)行速度是不如編譯后的程序運(yùn)行的快的.編譯器與解釋器的區(qū)別編譯器是把源程序的每一條語句都編譯成機(jī)器1.2
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度四人合伙股東共同投資影視項(xiàng)目協(xié)議
- 2025年資料員勞動合同模板:電子商務(wù)行業(yè)適用
- 二零二五年度工程款代付與建筑工程款支付管理協(xié)議
- 2025年度智能物流電子商務(wù)代發(fā)貨協(xié)議
- 藥店員工合同協(xié)議書(二零二五年度)-藥品銷售與顧客服務(wù)專項(xiàng)
- 2025年度智能家居合伙成立公司合作協(xié)議
- 2025年度櫥柜行業(yè)品牌孵化與培育合同
- 2025年度餐飲行業(yè)化糞池清理與食品安全協(xié)議
- 2025年砸墻工程安全教育培訓(xùn)及考核協(xié)議合同
- 2025年度酒店客房改造與租賃合同
- 新能源汽車動力電池技術(shù):各類動力電池的工作原理及應(yīng)用課件
- 高中歷史世界史 試題
- 2023年山東城市建設(shè)職業(yè)學(xué)院單招綜合素質(zhì)考試筆試模擬試題及答案解析
- 中組部2015年版干部履歷表-(空表格)
- 昆醫(yī)大康復(fù)治療技術(shù)課件12運(yùn)動再學(xué)習(xí)療法
- 醫(yī)院入院通知書格式
- 中建三局薪酬管理暫行規(guī)定
- 履帶式起重機(jī)負(fù)荷試驗(yàn)及調(diào)試報(bào)告報(bào)審表
- 《黑龍江省住房和城鄉(xiāng)建設(shè)系統(tǒng)行政處罰裁量基準(zhǔn)》
- 發(fā)育生物學(xué)1-9章全
- 基于單片機(jī)的交通信號燈模擬控制系統(tǒng)設(shè)計(jì) 答辯PPT
評論
0/150
提交評論