資源描述:
《編譯原理復(fù)習(xí)清華呂映芝.ppt》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、編譯原理清華大學(xué)計算機(jī)科學(xué)與技術(shù)系呂映芝2003.9.9第1章編譯程序概論1.1什么是編譯程序1.2翻譯和解釋1.3編譯過程和編譯程序的結(jié)構(gòu)*1.4編譯程序的實(shí)現(xiàn)途徑1.5編譯技術(shù)在其它軟件中的應(yīng)用有關(guān)學(xué)習(xí)問題參考書1.1什么是編譯程序語言和翻譯:語言是人類交流思想和信息的工具。從自然語言來說,世界上存在著許多種語言,各國之間要交流信息,就要有各種語言之間的翻譯。編譯程序:編譯程序就是一個語言的翻譯程序,是把一種語言(稱源語言)書寫的程序翻譯成另一種等價功能語言(稱目標(biāo)語言)的程序。換句話說,編譯是指把一種用源語言表示的算法轉(zhuǎn)換到另一種等價
2、的用目標(biāo)語言表示的算法。1.1什么是編譯程序編譯程序的必要性:計算機(jī)是當(dāng)代科學(xué)發(fā)展的重要工具,已滲入到各行各業(yè)乃至家庭生活中。所以如何讓他為人類工作服務(wù),就必須建立人與計算機(jī)之間的信息交流。但計算機(jī)只認(rèn)識由“0”和“1”構(gòu)成的機(jī)器語言,并不認(rèn)識C、C++、Java、Pascal等高級程序設(shè)計語言。每臺計算機(jī)都有自己獨(dú)特的指令系統(tǒng),即機(jī)器語言,最早的程序就是用8進(jìn)制和16進(jìn)制碼的機(jī)器語言書寫的。1.1什么是編譯程序用機(jī)器語言書寫程序,不僅不易學(xué),而且可調(diào)試性、可讀性、可維護(hù)性和結(jié)構(gòu)性都很差,開發(fā)時間也很長。因此,編譯程序最初的定義是把一種高級
3、程序設(shè)計語言的源程序(面向人的)翻譯成另一種等價的低級程序設(shè)計語言(面向硬件的)即機(jī)器語言或匯編語言。所以,編譯程序是人用某種語言書寫的某個翻譯程序。1.1什么是編譯程序編譯程序的功能編譯程序高級程序設(shè)計語言(源語言)機(jī)器語言(目標(biāo)語言)S:源語言(程序)O:目標(biāo)語言(程序)I:實(shí)現(xiàn)語言SOI用T型圖表示1.1什么是編譯程序隨著計算機(jī)及其應(yīng)用的發(fā)展,出現(xiàn)了各種應(yīng)用更方便的高級語言,如:FORTRAN、PL/1、ALGOL60、COBOL、PASCAL、Ada、LISP、C、C++、JAVA等。早期開發(fā)的軟件需轉(zhuǎn)換,因此,編譯程序不僅是高級語
4、言翻譯成機(jī)器語言,廣泛地講:編譯程序高級語言?低級語言高級語言?高級語言高級語言?中間語言中間語言?低級語言1.1什么是編譯程序例:高級語言?高級語言FORTRANPASCALCJAVAPL/1C++COBOLCAdaJAVA1.1什么是編譯程序逆向工程低級語言?高級語言例:IBM/4700(匯編語言)?C交叉編譯在一個機(jī)器上對某種高級語言進(jìn)行編譯,產(chǎn)生的目標(biāo)語言是另一個機(jī)器的匯編語言或機(jī)器語言。例:在WAX機(jī)上編譯Ada語言,產(chǎn)生PC機(jī)的匯編語言,這樣的目標(biāo)語言只能在PC機(jī)上運(yùn)行,如嵌入式系統(tǒng)對交叉編譯的應(yīng)用。當(dāng)功能相同時,不同語言之間的
5、區(qū)別,只是語言的詞法、語法和語義規(guī)則形式不同。運(yùn)行環(huán)境也可能不同。例:計算園面積C程序:functioncircle();{intr;floats;scanf(“%d”,&r);s=3.1416*r*r;printf(“%d”,s);}Pascal程序:procedurecircle;varr:integer;s:real;beginread(r);s:=3.1416*r*r;write(s);end;1.2翻譯和解釋翻譯:按源程序的實(shí)際輸入順序,處理程序語句,得到可執(zhí)行的目標(biāo)程序。解釋:按源語言的定義邊解釋邊執(zhí)行。解釋執(zhí)行是按照被解釋
6、的源程序的邏輯流程進(jìn)行處理的,不產(chǎn)生目標(biāo)程序。解釋程序源程序輸入輸出解釋解釋執(zhí)行優(yōu)點(diǎn):交互方便,節(jié)省空間。缺點(diǎn):效率低。因?qū)υ闯绦虻难h(huán)語句部分要反復(fù)解釋執(zhí)行。共同點(diǎn):都需進(jìn)行詞法、語法、語義分析。可比喻為:翻譯(編譯)---筆譯(產(chǎn)生目標(biāo)程序)解釋---口譯(不產(chǎn)生目標(biāo)程序)1.3編譯過程和編譯程序結(jié)構(gòu)編譯過程編譯程序結(jié)構(gòu)編譯的趟(遍)(pass)編譯過程詞法分析語法分析語義分析中間代碼生成代碼優(yōu)化目標(biāo)代碼生成詞法分析讀字符流的源程序、識別單詞例:position:=initial+rate*60;(轉(zhuǎn)換為內(nèi)部表示,拼標(biāo)識符、數(shù)和復(fù)合單詞
7、等)單詞類型單詞值標(biāo)識符(1)position算符(賦值號):=(復(fù)合單詞)詞法分析單詞類型單詞值標(biāo)識符(2)initial算符(加號)+標(biāo)識符(3)rate算符(乘號)*整數(shù)60界符(分號);語法分析功能:層次分析,把源程序的單詞組成語法短語(表示成語法樹或其它內(nèi)部碼)?,F(xiàn)用“巴科斯-瑙爾范式”(EBNF)描述。例:<賦值語句>::=<標(biāo)識符>:=<表達(dá)式><表達(dá)式>::=<表達(dá)式>+<表達(dá)式><表達(dá)式>::=<表達(dá)式>*<表達(dá)式><表達(dá)式>::=“(”<表達(dá)式>“)”<表達(dá)式>::=<標(biāo)識符><表達(dá)式>::=<常數(shù)>語法分析(語法樹):
8、=+60*positioninitialrate語義分析語義審查靜態(tài)語義檢查上下文相關(guān)性如:類型匹配和類型轉(zhuǎn)換例:Programp();varrate:real;procedur