資源描述:
《編譯原理結(jié)課論文》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫(kù)。
1、塔里木大學(xué)-信息工程學(xué)院編譯原理實(shí)驗(yàn)編譯原理結(jié)課論文題目:詞法分析作者:馬全安電話:18290781046Email:1002468671@qq.com教師:肖少擁、吳剛遞交日期:2013年11月28日-16-塔里木大學(xué)-信息工程學(xué)院編譯原理實(shí)驗(yàn)-16-塔里木大學(xué)-信息工程學(xué)院編譯原理實(shí)驗(yàn)摘要詞法分析作為編譯的基礎(chǔ),其主要任務(wù)是對(duì)構(gòu)成源程序的字符流進(jìn)行掃描,然后根據(jù)構(gòu)詞規(guī)則識(shí)別單詞符號(hào),而這恰是源代碼逆向分析過(guò)程中必不可少的一步。隨著軟件逆向工程的不斷發(fā)展,詞法分析被廣泛應(yīng)用于源代碼逆向分析。本文就詞法分析在源代碼逆
2、向分析過(guò)程中的應(yīng)用進(jìn)行探討,嘗試用簡(jiǎn)明易懂的方式去獲得逆向分析后續(xù)工作所需的單詞符號(hào)的各類信息。關(guān)鍵詞 詞法分析;逆向分析;源代碼;單詞符號(hào)前言編譯原理是一個(gè)十分復(fù)雜的加工處理程序。它將便于人們閱讀但不能直接在計(jì)算機(jī)上執(zhí)行的源程序翻譯成語(yǔ)義上等價(jià)并且可在計(jì)算機(jī)上執(zhí)行的目標(biāo)程序。為了處理各種使用于不同目的的源程序,一般將整個(gè)編譯過(guò)程劃分為五個(gè)處理階段,分別是詞法分析、語(yǔ)法分析、中間代碼生成(語(yǔ)義分析)、代碼優(yōu)化和目標(biāo)代碼生成。在編譯程序結(jié)構(gòu)中,詞法分析程序通常作為子例程被語(yǔ)法分析調(diào)用,每一次調(diào)用返回一個(gè)單詞。一個(gè)源程序
3、有許多單詞組成,詞法分析程序被調(diào)用較頻繁,它的頻率直接決定編譯程序的效率。詞法分析對(duì)源程序進(jìn)行自左至右的掃描,將它從外部形式(字符串)變換成便于后幾個(gè)階段處理的內(nèi)部形式,即分解出一個(gè)個(gè)有獨(dú)立語(yǔ)法意義的單元,稱之為單詞(又稱符號(hào)或者特征),同時(shí)識(shí)別出與其相關(guān)的屬性。優(yōu)化階段對(duì)語(yǔ)義分析所產(chǎn)生的中間代碼進(jìn)行改造,以獲得等價(jià)但更為高效(指時(shí)間和空間的節(jié)?。┑闹虚g代碼。目標(biāo)代碼生成階段根據(jù)中間代碼和表格信息,進(jìn)行存儲(chǔ)分配,選擇代碼,形成可在計(jì)算機(jī)上執(zhí)行的目標(biāo)程序。如果目標(biāo)代碼生成階段產(chǎn)生的代碼為匯編語(yǔ)言程序,那么嗨應(yīng)再經(jīng)過(guò)匯編
4、階段才能產(chǎn)生機(jī)器代碼程序?! 』谏鲜?,本文通過(guò)設(shè)計(jì)、編制、調(diào)試一個(gè)具體的詞法分析程序,對(duì)詞法分析器的具體實(shí)現(xiàn)。?正文1、詞法分析-16-塔里木大學(xué)-信息工程學(xué)院編譯原理實(shí)驗(yàn)詞法分析程序又稱掃描器,它是編譯過(guò)程的第一個(gè)階段。其主要任務(wù)是從左到右依次描描字符串形式的源程序的各個(gè)字符,逐個(gè)識(shí)別出其中的單詞,并將其轉(zhuǎn)換成為內(nèi)部編碼形式的單詞符號(hào)串輸出,用于進(jìn)行語(yǔ)法分析。通??刹捎枚剑–LASS,VALUE)來(lái)表示一個(gè)單詞符號(hào)的內(nèi)部編碼,其中CLASS為一整數(shù)碼,用于表示該單詞的類別;VALUE則是單詞之值(如變量名在符
5、號(hào)表中的序號(hào),常數(shù)的二進(jìn)制表示,以及運(yùn)算符和分隔符的編碼,等等)。概括的說(shuō),掃描器在其工作過(guò)程中,一般應(yīng)完成下列的任務(wù):(1)識(shí)別出源程序中的各個(gè)單詞符號(hào),并將其轉(zhuǎn)換成內(nèi)部編碼形式;(2)刪除無(wú)用的空白字符、回車字符以及其他非實(shí)質(zhì)性字符;(3)刪除注釋;(4)進(jìn)行詞法檢查,報(bào)告所發(fā)現(xiàn)的錯(cuò)誤。此外,視編譯工作流程的組織,一些編譯程序在進(jìn)行詞法分析時(shí),還要完成將所識(shí)別出的標(biāo)志符登錄到符號(hào)表的工作。從功能上看,詞法分析上把字符串形式的源程序轉(zhuǎn)換為單詞串形式,然后進(jìn)行語(yǔ)法分析。從工作方式上看,他與語(yǔ)法分析之間存在兩種接口方式
6、。一種方式是將詞法分析的輸出結(jié)果存放在一個(gè)中間文件上,后面的語(yǔ)法分析程序?qū)⑺鳛檩斎脒M(jìn)行語(yǔ)法分析。另一種方式是將詞法分析編成一個(gè)子程序,該子程序由語(yǔ)法分析程序調(diào)用,當(dāng)語(yǔ)法分析程序需要讀出一個(gè)具有獨(dú)立意義的單詞。本設(shè)計(jì)采用前一種方式。1.1根據(jù)狀態(tài)轉(zhuǎn)換圖直接編程?編寫一個(gè)詞法分析程序,它從左到右逐個(gè)字符的對(duì)源程序進(jìn)行掃描,產(chǎn)生一個(gè)個(gè)的單詞的二元式,形成二元式(記號(hào))流文件輸出。在此,詞法分析程序作為單獨(dú)的一遍,如下圖所示。?源程序?詞法分析程序?記號(hào)文件?具體任務(wù)有:?(1)組織源程序的輸入?(2)拼出單詞并查找其類別
7、編號(hào),形成二元式輸出,得到單詞流文件?(3)刪除注釋、空格和無(wú)用符號(hào)?(4)發(fā)現(xiàn)并定位詞法錯(cuò)誤,需要輸出錯(cuò)誤的位置在源程序中的第幾行。將錯(cuò)誤信息輸出到屏幕上。?(5)對(duì)于普通標(biāo)識(shí)符和常量,分別建立標(biāo)識(shí)符表和常量表(使用線性表存儲(chǔ)),當(dāng)遇到一個(gè)標(biāo)識(shí)符或常量時(shí),查找標(biāo)識(shí)符表或常量表,若存在,則返回位置,否則返回0并且填寫符號(hào)表或常量表。?標(biāo)識(shí)符表結(jié)構(gòu):變量名,類型(整型、實(shí)型、字符型),分配的數(shù)據(jù)區(qū)地址?注:詞法分析階段只填寫變量名,其它部分在語(yǔ)法分析、語(yǔ)義分析、代碼生成等階段逐步填入。?常量表結(jié)構(gòu):常量名,常量值?義1
8、.2?詞法分析程序的功能:?輸入:所給文法的源程序字符串。?-16-塔里木大學(xué)-信息工程學(xué)院編譯原理實(shí)驗(yàn)輸出:二元組(syn,token或sum)構(gòu)成的序列。?其中:syn為單詞種別碼;???????token為存放的單詞自身字符串;???????sum為整型常數(shù)。?例如:對(duì)源程序begin?x:=9:?if?x>9?then?x:=2*x+1