實驗1-4-《編譯原理》詞法分析程序設(shè)計方案_第1頁
實驗1-4-《編譯原理》詞法分析程序設(shè)計方案_第2頁
實驗1-4-《編譯原理》詞法分析程序設(shè)計方案_第3頁
實驗1-4-《編譯原理》詞法分析程序設(shè)計方案_第4頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、實驗 1-4 編譯原理 S 語言詞法分析程序設(shè)計方案一、實驗?zāi)康牧私庠~法分析程序的兩種設(shè)計方法:1. 根據(jù)狀態(tài)轉(zhuǎn)換圖直接編程的方式;2. 利用DFA編寫通用的詞法分析程序。二、實驗內(nèi)容1根據(jù)狀態(tài)轉(zhuǎn)換圖直接編程編寫一個詞法分析程序,它從左到右逐個字符的對源程序進行掃描,產(chǎn)生一個個的單詞的二元式,形成二元式(記號)流文件輸出。在此,詞法分析程序作為單獨的一遍,如下圖所示。源程序詞法分析程序記號文件具體任務(wù)有:( 1)組織源程序的輸入( 2)拼出單詞并查找其類別編號 ,形成二元式輸出,得到單詞流文件( 3)刪除注釋、空格和無用符號( 4)發(fā)現(xiàn)并定位詞法錯誤,需要輸出錯誤的位置在源程序中的第幾行。將錯

2、誤信息輸出到屏幕上。(5)對于普通標(biāo)識符和常量,分別建立標(biāo)識符表和常量表(使用線性表存儲),當(dāng)遇到一個標(biāo)識符或常量時,查找標(biāo)識符表或常量表,若存在,則返回位置, 否則返回0 并且填寫符號表或常量表。標(biāo)識符表結(jié)構(gòu):變量名,類型(整型、實型、字符型),分配的數(shù)據(jù)區(qū)地址注:詞法分析階段只填寫變量名,其它部分在語法分析、語義分析、代碼生成等階段逐步填入。常量表結(jié)構(gòu):常量名,常量值2編寫 DFA模擬程序算法如下:DFA( S=S0,MOVE ,F ,ALPHABET )/*S為狀態(tài),初值為DFA的初態(tài), MOVE 為狀態(tài)轉(zhuǎn)換矩陣,F(xiàn) 為終態(tài)集, ALPHABET為字母表,其中的字母順序與MOVE 中列標(biāo)

3、題的字母順序一致。*/Char Wordbuffer10=“” / 單詞緩沖區(qū)置空Nextchar=getchar(); / 讀i=0 ;while ( nextchar ! =NULL) /NULL 代表此類單詞 if( nextchar ! ALPHABET) ERROR(“非法字符” ),return (“非法字符” );S=MOVESnextchar /下一狀態(tài)if( S=NULL) return (“不接受”); / 下一狀態(tài)為空,不能識別,單詞錯誤wordbufferi=nextchar; /保存單詞符號i+;nextchar=getchar();Wordbufferi=0 ;If

4、( S F)return(wordbuffer);/接受Else return(“不接受”);該算法要求:實現(xiàn) DFA算法,給定一個 DFA(初態(tài)、狀態(tài)轉(zhuǎn)換矩陣、終態(tài)集、字母表) ,調(diào)用 DFA(),識別給定源程序中的單詞,查看結(jié)果是否正確。三、實驗要求1能對任何S 語言源程序進行分析在運行詞法分析程序時,應(yīng)該用問答形式輸入要被分析的S 源語言程序的文件名,然后對該程序完成詞法分析任務(wù)。2能檢查并處理某些詞法分析錯誤詞法分析程序能給出的錯誤信息包括:總的出錯個數(shù), 每個錯誤所在的行號,錯誤的編號及錯誤信息。本實驗要求處理以下兩種錯誤(編號分別為1, 2):1:非法字符:單詞表中不存在的字符處理

5、為非法字符,處理方式是刪除該字符,給出錯誤信息,“某某字符非法” 。2:源程序文件結(jié)束而注釋未結(jié)束。注釋格式為:/* */四、保留字和特殊符號表單詞代碼123456789單詞intcharfloatvoidconstforifelsethen單詞助記intcharfloatvoidconstforifelsethen符內(nèi)碼值-單詞代碼101112131415161718單詞whiswitbreakbegiend標(biāo)識符數(shù)字(包lechn括整數(shù)和實數(shù))單詞助記whiswitbreakbegiendidnum符lechn內(nèi)碼值-在符號表在常數(shù)表中的位置中的位置單詞代碼1920212223242526

6、27單詞+-*/%()單詞助記 +-*/%()符內(nèi)碼值-單詞代碼28303536單詞<><=>=!=%;單詞助記rlop%;符內(nèi)碼值<><=>=!=-單詞代碼373839404142434445單詞/=+=-=*=%=|&&!=單詞助記/=+=-=*=%=orandnot=符內(nèi)碼值-單詞的構(gòu)詞規(guī)則:字母 =A-Za-z數(shù)字 =0-9標(biāo)識符 =(字母 |_ )(字母 | 數(shù)字) *數(shù)字 =數(shù)字 ( 數(shù)字 )*(.+數(shù)字| )四、 S 語言表達式和語句說明1算術(shù)表達式:+ 、- 、*、/ 、 %2關(guān)系運算符:>、 >=、&

7、lt;、 <=、=、! =3賦值運算符:=, +=、-= 、 *= 、/= 、 %=4變量說明:類型標(biāo)識符變量名表;5類型標(biāo)識符:intcharfloat6 If語句:if表達式then語句else語句 7 For語句:for(表達式1;表達式2;表達式3) 語句8 While語句:while表達式do語句9 S 語言程序:由函數(shù)構(gòu)成,函數(shù)不能嵌套定義。函數(shù)格式為:返回值函數(shù)名(參數(shù))begin數(shù)據(jù)說明語句end10復(fù)合語句構(gòu)成begin語句序列end五、程序參考結(jié)構(gòu)說明主函數(shù)InitscannerScannerLexscancloseIsalphaIsnumberIsanotation

8、IsotherOutputError1 Initscanner函數(shù):程序初始化:輸入并打開源程序文件和目標(biāo)程序文件,初始化保留字表2 Scanner 函數(shù):若文件未結(jié)束,反復(fù)調(diào)用lexscan函數(shù)識別單詞。3 Lexscan 函數(shù):根據(jù)讀入的單詞的第一個字符確定調(diào)用不同的單詞識別函數(shù)4 Isalpha函數(shù):識別保留字和標(biāo)識符5 Isnumber 函數(shù):識別整數(shù),如有精力,可加入識別實數(shù)部分工功能6 Isanotation函數(shù):處理除號/ 和注釋7 Isother函數(shù)識別其他特殊字符8Output 函數(shù):輸出單詞的二元式到目標(biāo)文件,輸出格式 (單詞助記符, 單詞內(nèi)碼值),如( int , - )

9、( rlop , >)9 Error函數(shù):輸出錯誤信息到屏幕10 除此之外,還可以設(shè)置查符號表,填寫符號表等函數(shù),學(xué)生可自行設(shè)計。六、實驗過程說明1每人單獨完成。2完成后,由老師驗收,并給出成績。3實驗完成后,寫出實驗報告(要求交打印稿)。報告內(nèi)容要求如下:完成人:班級、學(xué)號、姓名一、實驗名稱:簡化S 語言詞法分析器二、實驗?zāi)康模和ㄟ^手工編寫簡化 C 語言詞法分析器,熟悉并深入理解編譯程序詞法分析器的工作原理。三、實驗內(nèi)容:1根據(jù)保留字和特殊符號表能區(qū)分出源文件中的保留字、普通標(biāo)識符和特殊符號,并能進行簡單的錯誤處理。2設(shè)計詞法分析器模塊調(diào)用結(jié)構(gòu)圖和各模塊流程圖。3程序源代碼。4程序的執(zhí)行結(jié)果:輸入文件,輸出結(jié)果文件及屏幕信息。四、實驗中出現(xiàn)的問題及解決方法。七、實驗時間地點安排共提供 4 次課上機時間,如上課不能完成,課下自行解決地點: 1,2 班 軟 2 機房, 3,4 班軟 3 機房時間:第三周周一2 單元周三周五2 單元2 單元第四周周一2 單元2009 年3月測試源程序示例:/aa.cvoid aa( )beginfloat rate,circle;rate=3;circle=3.14*rate*ra

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論