資源描述:
《編譯器設計難點》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、現(xiàn)代編譯器的設計及其難點摘要:我們常用的計算機軟件,都需要通過編譯的方式,把使用高級計算機語言編寫的代碼(比如C代碼)編譯(compile)成計算機可以識別和執(zhí)行的二進制代碼。在現(xiàn)代計算機系統(tǒng)中,編譯器的設計始終都是一個重點與難點。此文主要介紹了編譯器的設計方法,交叉編譯的誕生及其應用。關鍵詞:代碼、編譯器、交叉編譯。導論:首先談談編譯器的主要功能及其設計步驟,然后對主機編譯器進行研究,具體分析設計步驟,思考什么時候要用到交叉編譯?;仡櫍壕幾g器是將便于人編寫,閱讀,維護的高級計算機語言翻譯為計算機能解讀、運行的低級機器語言的程序。編譯器將原始程序(Sourceprogram)作為輸
2、入,翻譯產生使用目標語言(Targetlanguage)的等價程序。編譯程序完成從源程序到目標程序的翻譯工作,是一個復雜的整體的過程。一個現(xiàn)代編譯器的主要工作流程如下:源程序(sourcecode)→預處理器(preprocessor)→編譯器(compiler)→匯編程序(assembler)→目標程序(objectcode)→連接器(鏈接器,Linker)→可執(zhí)行程序(executables)。從概念上來講,一個編譯程序的整個工作過程是劃分成階段進行的,每個階段將源程序的一種表示形式轉換成另一種表示形式,各個階段進行的操作在邏輯上是緊密連接在一起的。一般一個編譯過程劃分成詞法分
3、析、語法分析、語義分析、中間代碼生成,代碼優(yōu)化和目標代碼生成六個階段,這是一種典型的劃分方法(如圖1)。圖1但有的目的平臺上不允許或不能夠安裝我們所需要的編譯器,而我們又需要這個編譯器的某些特征;或者目標平臺上的資源貧乏,無法運行我們所需要編譯器,此時就需要用到交叉編譯。什么是交叉編譯呢,簡單地說,就是在一個平臺上生成另一個平臺上的可執(zhí)行代碼。這里需要注意的是所謂平臺,實際上包含兩個概念:體系結構(Architecture)、操作系統(tǒng)(OperatingSystem)。同一個體系結構可以運行不同的操作系統(tǒng);同樣,同一個操作系統(tǒng)也可以在不同的體系結構上運行。舉例來說,我們常說的x86
4、Linux平臺實際上是Intelx86體系結構和Linuxforx86操作系統(tǒng)的統(tǒng)稱;而x86WinNT平臺實際上是Intelx86體系結構和WindowsNTforx86操作系統(tǒng)的簡稱。,例如:編譯程序在宿主機A上運行,將應用程序的源程序生成目標機B的代碼(如圖2)。與主機編譯相比,交叉編譯受的限制更多,雖然在理論上我們可以做任何形式的交叉編譯,但事實上,由于受到專利、版權、技術的限制,并不總是能夠進行交叉編譯,尤其是在業(yè)余條件下!舉例來說,至今無法生成惠普公司專有的som格式的可執(zhí)行文件,因此我們根本無法做目的平臺為HPPA-HPUX的交叉編譯。SOIOAB圖2 要進行交叉編譯
5、,需要在主機平臺上安裝對應的交叉編譯工具鏈(crosscompilationtoolchain),然后用這個交叉編譯工具鏈編譯我們的源代碼,最終生成可在目標平臺上運行的代碼。常見的交叉編譯例子如下: 1、在WindowsPC上,利用ADS(ARM開發(fā)環(huán)境),使用armcc編譯器,則可編譯出針對ARMCPU的可執(zhí)行代碼?! ?、在LinuxPC上,利用arm-linux-gcc編譯器,可編譯出針對LinuxARM平臺的可執(zhí)行代碼?! ?、在WindowsPC上,利用cygwin環(huán)境,運行arm-elf-gcc編譯器,可編譯出針對ARMCPU的可執(zhí)行代碼。理論分析:編譯器各階段的分組
6、前端:依賴于語言并很大程度上獨立于目標機器。一般包括語法分析、詞法分析、符號表的建立、語義分析、中間代碼生成以及相關錯誤處理。后端:依賴于目標機器的階段或某些階段的某些部分。一般來說,后端完成的任務不依賴于源語言而只依賴于中間語言。主要包括代碼優(yōu)化、代碼生成以及相關的錯誤處理和符號表操作。下面對編譯器的各個階段進行詳細分析:一、詞法分析詞法分析又稱掃描器(Scanner),是編譯的第一個階段,是語法分析的必要準備。詞法分析器讀入源程序,產生語言的基本詞法單元,還完成和用戶接口的一些任務詞法分析的主要任務:對構成源程序的字符串從左到右的掃描,逐個字符地讀入源程序字符并按照構詞規(guī)則切分
7、成一個一個具有獨立意義的單詞。并確定其屬性(如保留字、標識符、運算符、界限符和常量等)。再把它們轉換成長度統(tǒng)一的標準形式—屬性字(Token)。在這一階段,我們主要要掌握從正規(guī)式到有限自動機的構造方法。?構造詞法分析器的一般方法和步驟:<1>用正規(guī)式對模式進行描述;<2>為每個正規(guī)式構造一個NFA,它識別正規(guī)式所表示的正規(guī)集;<3>將構造出的NFA轉換成等價的DFA,這一過程也被稱為確定化;<4>優(yōu)化DFA,使其狀態(tài)數(shù)最少,這一過程也被稱為最小化;<5>從優(yōu)化后的DF