北交編譯原理專題1設(shè)計(jì)_第1頁
北交編譯原理專題1設(shè)計(jì)_第2頁
北交編譯原理專題1設(shè)計(jì)_第3頁
北交編譯原理專題1設(shè)計(jì)_第4頁
北交編譯原理專題1設(shè)計(jì)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、詞法分析程序設(shè)計(jì)一、 程序功能描述1. 文法擴(kuò)充對(duì)實(shí)驗(yàn)所給的文法進(jìn)行如下擴(kuò)充:字母字母數(shù)字?jǐn)?shù)字?jǐn)?shù)字?jǐn)?shù)字|數(shù)字 . + * ;,() =*|+| -|=|=|=|=|/|/ = / ! + - *該語言的保留字:void int float double if else for do while then輸入文件:input.txt保留字及其編碼文件:reserved.txt輸出文件:此法分析結(jié)果以“(類型編碼,單詞符號(hào))”的形式輸出到指定文件output.txt中2. 程序所能識(shí)別的單詞符號(hào)及其類別編碼程序能夠識(shí)別的文法所規(guī)定的所有合法的單詞符號(hào),對(duì)大小寫不敏感;能夠識(shí)別“/*/”和“/”兩種

2、形式的注釋;能夠?qū)⒃~法分析的結(jié)果以二元式的形式輸出到中間文件中。所能識(shí)別的單詞符號(hào)及其類別編碼見下表(紅色部分為語言的保留字): 單詞符號(hào)類別編碼單詞符號(hào)類別編碼單詞符號(hào)類別編碼非法字符021*/-1=22標(biāo)識(shí)符1=23無符號(hào)整數(shù)224void3!=25int4=26float5/*27double6+28if7-29else830for931do10+=32while11-=33then12*=34+13/=35-1438,17/39(18!40)19無符號(hào)小數(shù)4120/42表格 1 語言的保留字表如下: 3. 程序所能識(shí)別的字符串中的錯(cuò)誤類型程序還能發(fā)現(xiàn)輸入串中的錯(cuò)誤,能夠發(fā)現(xiàn)的錯(cuò)誤如下:

3、 錯(cuò)誤類型錯(cuò)誤舉例所有該語言沒有定義的單詞符號(hào)、&、%、$標(biāo)識(shí)符不能以數(shù)字開頭1abc、2a34數(shù)中包含多個(gè)小數(shù)點(diǎn)1.2.3小數(shù)中包括字母1.fg、2a.b表格 2二、 主要數(shù)據(jù)結(jié)構(gòu)描述全局變量char Token20; 字符數(shù)組,用來依次存放一個(gè)單詞詞文中的各個(gè)字符FILE *fpout; 輸出文件指針關(guān)鍵的局部變量FILE *fpinput; 輸入文件指針int ch; 用來存放從文件中讀入的字符FILE *fp; 文件指針char word20; 用來存放從保留字表中讀入的保留字bool hasDot; 記錄正在識(shí)別的單詞符號(hào)中是否有小數(shù)點(diǎn)bool error; 記錄正在識(shí)別的單詞符號(hào)中

4、是否有錯(cuò)誤bool isAnnotation; 標(biāo)志當(dāng)前讀入的單詞符號(hào)是否是注釋中的內(nèi)容int c; 存儲(chǔ)單詞符號(hào)所對(duì)應(yīng)的類別編碼表格 3三、 程序結(jié)構(gòu)描述1. 設(shè)計(jì)方法圖1 程序所能識(shí)別的單詞符號(hào)的DFA及相關(guān)的語義過程圖1中所出現(xiàn)的語義變量及語義函數(shù)的含義及功能說明如下:函數(shù)GETCHAR 每調(diào)用一次,就把掃描指示器當(dāng)前所指示的源程序字符送入字符變量ch中,然后把掃描指示器前推一個(gè)字符位置。字符數(shù)組TOKEN 用來依次存放一個(gè)單詞詞文中的各個(gè)字符。函數(shù)CAT 每調(diào)用一次,就把當(dāng)前ch中的字符拼接于TOKEN中所存字符串的右邊。函數(shù)LOOKUP 每調(diào)用一次,就以TOKEN中的字符串查保留字表

5、,若查到,并返回相應(yīng)關(guān)鍵字的類別碼,否則返回1(標(biāo)識(shí)符的類別編碼)。函數(shù)RETRACT 每調(diào)用一次,就把掃描指示器回退一個(gè)字符位置(即回退多讀的那個(gè)字符)。函數(shù)OUT 一般僅在進(jìn)入終態(tài)時(shí)調(diào)用此函數(shù),調(diào)用的形式為OUT(c,VAL).其中,實(shí)參c為相應(yīng)單詞的類別碼;當(dāng)所識(shí)別的單詞為標(biāo)識(shí)符、整數(shù)或小數(shù)時(shí),實(shí)參VAL為TOKEN(即詞文分別為字母和數(shù)字串)。2. 函數(shù)定義/*函數(shù)名:isalpha*功能: 判斷字符是否是字母*參數(shù): char ch 要驗(yàn)證的字符*返回值:bool 是否是字母*/bool isalpha(char ch)/*函數(shù)名:isUper*功能: 判斷字符是否是大寫字母*參數(shù):

6、 char ch 要驗(yàn)證的字符*返回值:bool 是否是大寫字母*/bool isUper(char ch)/*函數(shù)名:isalnumm*功能: 判斷字符是否是字母或數(shù)字*參數(shù): char ch 要驗(yàn)證的字符*返回值:bool 是否是字母或數(shù)字*/bool isalnum(char ch)/*函數(shù)名:isdigit*功能: 判斷字符是否是數(shù)字*參數(shù): char ch 要驗(yàn)證的字符*返回值:bool 是否是數(shù)字*/bool isdigit(char ch)/*函數(shù)名:lookUp*功能: 以所給的字符串查找保留字表,若查到,就* 返回相應(yīng)的關(guān)鍵字的類別碼,否則返回0*參數(shù): char *p 要查

7、找的字符串*返回值:int 關(guān)鍵字的類別碼*/int lookUp(char *p)/*函數(shù)名:out*功能: 將詞法分析結(jié)果以二元式的形式輸出到文件中*參數(shù): int c 單詞符號(hào)編碼* char *q 所讀入的單詞符號(hào)串*返回值:無*/void out(int c,char*q)/*函數(shù)名:report_error*功能: 將詞法分析結(jié)果以二元式的形式輸出到文件中*參數(shù): int c 單詞符號(hào)編碼* char *q 所讀入的單詞符號(hào)串*返回值:無*/void report_error(char*ch)/*函數(shù)名:scanner*功能: 識(shí)別輸入文件中的單詞符號(hào),判斷其是否是* 文法所規(guī)定的

8、合法的單詞符號(hào)*參數(shù): FILE * fp 文件指針*返回值:無*/void scanner(FILE * fp)/*函數(shù)名:main*功能: 主函數(shù),調(diào)用其他函數(shù)實(shí)現(xiàn)程序功能*/int main(int argc, char* argv)四、 程序測(cè)試1. 測(cè)試用例Double calculate(int num) /*ddddsdfdsd*/ int a1 = num + 3.0.8; float b = 2.456*c; if(f = 1e23)do h -= x/2; y += 1.2; /sdfghwhile(a=6); else y+; ax-; 1.f 12dqwe.gh & %

9、 $ 上述為測(cè)試用例,其中黃色部分為錯(cuò)誤輸入,在程序中應(yīng)該報(bào)錯(cuò);紅色部分為注釋。其余為可識(shí)別單詞符號(hào)。2. 測(cè)試結(jié)果1) 詞法分析結(jié)果以二元式序列的方式輸出到文件中從輸出結(jié)果可以看出,注釋符號(hào)“/*/”之間的內(nèi)容和注釋符號(hào)“/”后面的內(nèi)容沒有存入文件中,錯(cuò)誤單詞符號(hào)的類別編碼為0。2) 測(cè)試用例中的報(bào)錯(cuò)五、 心得體會(huì)通過本次實(shí)驗(yàn),我對(duì)詞法分析的過程有了更好的理解,通過繪制狀態(tài)轉(zhuǎn)換圖,能夠使得我們編程時(shí)條理更加清晰,在本次實(shí)驗(yàn)時(shí),我先前沒有繪制狀態(tài)轉(zhuǎn)化圖,使得編程時(shí)思路比較亂,代碼可讀性也比較差,特別是在程序錯(cuò)誤識(shí)別時(shí),由于沒有清晰的思路,使得編程存在一些困難。后來通過看狀態(tài)轉(zhuǎn)換圖各狀態(tài)之間的轉(zhuǎn)換關(guān)系,才能編寫出更加合理的代碼。在實(shí)驗(yàn)中,我是仿照書上

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論