編譯原理實驗報告-詞法分析_第1頁
編譯原理實驗報告-詞法分析_第2頁
編譯原理實驗報告-詞法分析_第3頁
編譯原理實驗報告-詞法分析_第4頁
編譯原理實驗報告-詞法分析_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

編譯原理課程實驗報告實驗1:詞法分析姓名趙璐媛院系軟件學院學號1143710516任課教師陳鄞指導教師陳鄞實驗地點軟件學院三樓機房實驗時間10月23日下午78節(jié)實驗課表現(xiàn)出勤、表現(xiàn)得分實驗報告得分實驗總分操作結(jié)果得分一、需求分析得分要求:闡述詞法分析系統(tǒng)所要完成的功能通過文件導入測試用例,可以通過用戶界面顯示并編輯測試用例。通過文件導入DFA轉(zhuǎn)換表,并在用戶界面中打印轉(zhuǎn)換表。識別代碼中的單詞,打印對應(yīng)的token序列。識別的單詞包括以下幾類:標識符(由大小寫字母、數(shù)字以及下劃線組成,但必須以字母或者下劃線開頭)關(guān)鍵字(①類型關(guān)鍵字:整型、浮點型、布爾型、記錄型;②分支結(jié)構(gòu)中的if和else;③循環(huán)結(jié)構(gòu)中的do和while;④過程聲明和調(diào)用中的關(guān)鍵字)運算符(①算術(shù)運算符;②關(guān)系運算符;③邏輯運算)界符(①用于賦值語句的界符,如“=”;②用于句子結(jié)尾的界符,如“;”;③用于數(shù)組表示的界符,如“[”和“]”;④用于浮點數(shù)表示的界符“.”)常數(shù)(十進制無符號整數(shù)和浮點數(shù),包括科學計數(shù)法;八進制和十六進制整數(shù);字符串常數(shù)和字符常數(shù)等)注釋(/*……*/形式)二、文法設(shè)計得分要求:對如下內(nèi)容展開描述給出各類單詞的詞法規(guī)則描述(正則文法或正則表達式)各類單詞的轉(zhuǎn)換圖標識符和關(guān)鍵字(_|letter)(_|letter|digit)*運算符以運算符“+”,“+=”,“++”的識別為例,其他運算符與此類似所有可以被識別的關(guān)系運算符有:“!=”,“==”,“>”,“>=”,“<”,“<=”所有可以被識別的算術(shù)運算符有:“+”,“+=”,“++”,“-”,“-=”,“--”,“*”,“*=”,“%”,“%=”,“/”,“/=”所有可以被識別的邏輯運算符有:“|”,“&”,“^”(按位或、與、異或),“||”,“&&”,“!”界符界符的文法與轉(zhuǎn)換圖較為簡單,不再詳述所有可以被識別的界符:“=”,“;”,“[”,“]”,“(”,“)”,“{”,“}”,“,”,“;”常數(shù)浮點數(shù)((1-9)(0-9)*.(0-9)*)|(.(0-9)+)十進制數(shù)0|((((1-9)(0-9)*.(0-9)*)|(.(0-9)+))(ε|(e(+|-|ε)(0-9)+)))下劃線部分為十進制浮點數(shù)八進制數(shù)0(1-7)+十六進制數(shù)0x(1-9|a-f)+浮點數(shù)為終態(tài)2,十進制數(shù)為終態(tài)1、5、6,八進制數(shù)為終態(tài)7,十六進制數(shù)為終態(tài)9。字符串常數(shù)“(ε|(letter*letter))”紅色letter代表除了\字符外的字符,因\”是轉(zhuǎn)義字符字符常數(shù)‘(\\(a|b|f|r|t|v|n|\\|’|”))|letter)’同時對轉(zhuǎn)義字符進行識別注釋/\*letter*\*/三、系統(tǒng)設(shè)計得分要求:分為系統(tǒng)概要設(shè)計和系統(tǒng)詳細設(shè)計。(1)系統(tǒng)概要設(shè)計:給出必要的系統(tǒng)宏觀層面設(shè)計圖,如系統(tǒng)框架圖、數(shù)據(jù)流圖、功能模塊圖等以及相應(yīng)的文字說明。(2)系統(tǒng)詳細設(shè)計:對如下工作進行展開描述核心數(shù)據(jù)結(jié)構(gòu)的設(shè)計主要功能函數(shù)說明程序核心部分的程序流程圖系統(tǒng)概要設(shè)計系統(tǒng)的設(shè)計類圖如下:(建議放大查看)在選擇了DFA文件和代碼文件后,點擊分析按鈕,由DFAView生成DFA實例,調(diào)用DFA實例的doDFA方法對CodeView中的代碼進行分析,分析結(jié)果傳遞給OutputView顯示。系統(tǒng)詳細設(shè)計系統(tǒng)的核心類為DFA類,DFA類中的table是DFA轉(zhuǎn)換表,map是字符集及每個字符在轉(zhuǎn)換表對應(yīng)列的下標。doDFA方法對代碼進行分析,每分析出一個單詞,則將該單詞在代碼中的起始下標、終止下標、對應(yīng)終態(tài)碼傳遞給getTokenDiscrible方法,獲取該單詞Token的字符串描述。Token類中記錄了總的狀態(tài)數(shù)和所有關(guān)鍵字,getToken方法判斷某一個狀態(tài)值是否是終態(tài),若是終態(tài)返回對應(yīng)的種別碼,若不是則返回null。doDFA方法的分析流程圖如下:(建議放大查看)四、系統(tǒng)實現(xiàn)及結(jié)果分析得分要求:對如下內(nèi)容展開描述。系統(tǒng)實現(xiàn)過程中遇到的問題;針對某測試程序輸出其詞法分析結(jié)果;輸出針對此測試程序?qū)?yīng)的詞法錯誤報告;對實驗結(jié)果進行分析。注:其中的測試樣例自行產(chǎn)生。系統(tǒng)實現(xiàn)過程中遇到的問題剛開始時,遇到了字符串和注釋中如果有空格,會將字符串和注釋分成多個單詞的問題。然后進行改進,遇到空格等空白字符,判斷一下狀態(tài)碼,如果是在識別字符串或注釋的過程中,則不對其做處理,解決了這個問題。測試程序及測試結(jié)果測試程序:#include<stdio.h>intmain(){ /*number*/ intnum=10; intx=1,a=0,b=123,c=0123,d=0x123abc; floaty=2.2; doublee=1.2e-3; char_char1='c',_char2='\n',str[6]="hello"; x+=1; x-=1; x*=1; x/=1; printf("%f\n",x+y); printf("%f\n",x/y); if(x<=y&&x>0){ printf("%s\n","x<=y\n"); } else{ printf("%s\n","x>y\n"); } while(num!=100){num++;} /*errorcase*/ char_char3='ab',charstr~[10]=“ab\””; return0;}測試結(jié)果:錯誤報告及結(jié)果分析char_char3='ab',charstr~[10]="ab\"";對于錯誤的詞法’ab’,分析器報錯:ERROR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論