電子科大-編譯原理實(shí)驗(yàn)報(bào)告(得分80分)_第1頁
電子科大-編譯原理實(shí)驗(yàn)報(bào)告(得分80分)_第2頁
電子科大-編譯原理實(shí)驗(yàn)報(bào)告(得分80分)_第3頁
電子科大-編譯原理實(shí)驗(yàn)報(bào)告(得分80分)_第4頁
電子科大-編譯原理實(shí)驗(yàn)報(bào)告(得分80分)_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、電子科技大學(xué)實(shí)驗(yàn)報(bào)告學(xué)生名稱:父親學(xué)號(hào): 2222222222222指導(dǎo)教師:陳昆實(shí)驗(yàn)地點(diǎn):科研樓A-506實(shí)驗(yàn)時(shí)間: 2017-04-28一、實(shí)驗(yàn)項(xiàng)目名稱:字句分析器的設(shè)計(jì)與實(shí)現(xiàn)二、實(shí)驗(yàn)學(xué)時(shí): 4學(xué)時(shí)三、實(shí)驗(yàn)原理1 .編譯器要求分析和合成用高級(jí)語言寫的源程序,生成目標(biāo)程序。 字句解析是第一次解析源程序,實(shí)現(xiàn)字句解析的程序是字句解析程序或字句解析器,也稱為掃描儀。2 .詞法分析的功能是從左到右逐個(gè)掃描源程序的字符串,根據(jù)詞法規(guī)則識(shí)別和輸出單詞符號(hào),并針對(duì)在識(shí)別過程中發(fā)現(xiàn)的詞法錯(cuò)誤輸出相關(guān)錯(cuò)誤信息。3 .識(shí)別的單詞采用某種中間表現(xiàn)形式,通常一個(gè)單詞用一個(gè)二項(xiàng)式表示:(單詞類別,單詞的屬性)。4

2、.狀態(tài)遷移圖簡稱遷移圖,是有限有向圖,是設(shè)計(jì)詞法分析器的有效工具。四、實(shí)驗(yàn)?zāi)康耐ㄟ^這個(gè)實(shí)驗(yàn),學(xué)生們自己設(shè)計(jì)字句分析器,使學(xué)生們能更好地掌握字句分析程序的設(shè)計(jì)原理和相應(yīng)的程序設(shè)計(jì)方法,在對(duì)編譯該課程也能更深入地理解的同時(shí),也能訓(xùn)練編程能力。5、實(shí)驗(yàn)內(nèi)容實(shí)現(xiàn)n! 的極小語言詞法分析程序,作為輸出返回二項(xiàng)式。六、實(shí)驗(yàn)器材(設(shè)備、零件)1 .操作系統(tǒng): windows XP2 .開發(fā)工具: VS2013七、實(shí)驗(yàn)程序(在VS2013中創(chuàng)建工程(2)制作輸入輸出、初始化、錯(cuò)誤處理等函數(shù)(3)制作對(duì)應(yīng)的單詞符號(hào)和種類對(duì)照表,根據(jù)狀態(tài)遷移圖制作對(duì)應(yīng)的處理函數(shù)(4)執(zhí)行代碼進(jìn)行調(diào)試(5)制作測(cè)試所需的輸入文件。

3、 pas文件(6)生成dyd文件。8 .實(shí)驗(yàn)數(shù)據(jù)和結(jié)果分析編碼完成后,將測(cè)試程序放置在debug文件夾中,如下圖所示如果代碼成功運(yùn)行,則生成與調(diào)試文件夾相對(duì)應(yīng)的exe,在cmd上運(yùn)行時(shí),調(diào)試文件夾生成后綴為dyd和err的文件,dyd如下圖所示打開由于沒有錯(cuò)誤,對(duì)應(yīng)的test1.err文件為空對(duì)源程序進(jìn)行詞法分析,如果錯(cuò)誤信息和行數(shù)錯(cuò)誤,可以生成二項(xiàng)式文件。九、實(shí)驗(yàn)結(jié)論詞法分析器的功能是,從左到右逐個(gè)掃描源程序的字符串,根據(jù)詞法規(guī)則識(shí)別和輸出單詞符號(hào),針對(duì)在識(shí)別過程中發(fā)現(xiàn)的詞法錯(cuò)誤,輸出相關(guān)的錯(cuò)誤信息。十、總結(jié)和體會(huì)通過這次實(shí)驗(yàn),詞法分析程序的設(shè)計(jì)在鍛煉自己的編程能力的同時(shí),加深了對(duì)詞法分析器

4、的理解、把握和編譯這一課的理解,提高了自己的本領(lǐng),在編碼過程中也遇到了很多問題。 例如,如何解決發(fā)生的文件的后端定位等,我的編碼能力在這次實(shí)驗(yàn)中取得了一定的提高。十一、本實(shí)驗(yàn)過程、方法和手段的改進(jìn)建議首先理解字句分析器的功能和輸入輸出形式,熟練地掌握狀態(tài)遷移圖。報(bào)告分?jǐn)?shù):指導(dǎo)教師簽名:實(shí)驗(yàn)的參考源代碼如下所示#include#include#include#define MAX_COUNT 2048#define ILLEGAL_CHAR_ERR 1#define UNKNOWN_OPERATOR_ERR 2char getnbc ()舉止char ch;ch=getchar ();while

5、 (1)舉止if (ch=r | ch=t | ch=)舉止ch=getchar ();以下else舉止break;以下以下返回信道;以下布爾萊特(char character )舉止if (字符=ar acter=z )| (字符=ar acter=z ) )返回真;else返回假;以下布爾數(shù)字(char character )舉止if (字符=0字符=9)返回真;else返回假;以下void retract(char character )舉止ungetc (字符,stdin )角色=空值;以下int reserve(char* token )舉止if (strcmp (令牌, begin

6、)=0)返回1;else if (strcmp (令牌,結(jié)束 )=0)返回2;else if (strcmp (令牌, integer)=0)返回3;else if (strcmp (令牌, if)=0)返回4;else if (strcmp ( then )=0)返回5;else if (strcmp (令牌, else)=0)返回6;else if (strcmp (令牌, function)=0)返回7;else if (strcmp (令牌, read)=0)返回8;else if (strcmp (令牌, write)=0)返回9;else返回0;以下int symbol ()舉止返

7、回10;以下int constant ()舉止返回11;以下void輸出(const char * token,int kindNum )舉止打印( s- n ,令牌,kindNum );以下bool error(int lineNum,int errNum )舉止char* errInfo;交換機(jī)(錯(cuò)誤)舉止case ILLEGAL_CHAR_ERR:errInfo=非字母字符;break;case UNKNOWN_OPERATOR_ERR:errInfo=未知運(yùn)算符;break;默認(rèn):errInfo=未知錯(cuò)誤;以下PS (PS, *line:%d%sn ,lineNum,errInfo)=

8、0)返回真;else返回假;以下bool LexAnalyze ()舉止靜態(tài)線性=1;char character;char token17=;character=getnbc ();交換機(jī)(字符)。舉止case n:輸出( eoln ,24 );線性數(shù);break;case EOF:輸出( eof ,25 );返回假;case a:case b:case c:case d:case e:case f:case g:case h:case i:case j:case k:case l:case m:case n:case o:case p:case q:case r:case s:case t

9、:case u:case v:case w:case x:case y:case z:case A:case B:case C:case D:case E:case F:case G:case H:case I:case J:case K:case L:case M:case N:case O:case P:case Q:case R:case S:case T:case U:case V:case W:case X:case Y:case Z:while (letter (character )| digit (character ) )舉止char s2= character ;strca

10、t (令牌,s )character=getchar ();以下retract (字符)int num;num=reserve(token )PS (PS!=0)輸出(令牌,數(shù)字)else舉止PPS;val=symbol ();輸出(令牌,val )以下break;case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:while (數(shù)字(字符) )舉止char s2= character ;strcat (令牌,s )character=getchar ();以下retract (字符)PPS;val=con

11、stant ();輸出(令牌,val )break;case=:輸出(=,12 );break;case :character=getchar ();if (字符=)輸出( ,13 );else if (字符=)輸出(=, 14 );else舉止retract (字符)output ( , 15 )以下break;case :character=getchar ();if (字符=)輸出(=, 16 );else舉止retract (字符)輸出( ,17 );以下break;case -:輸出(-,18 );break;case *:輸出( * ,19 );break;case :charac

12、ter=getchar ();if (字符=)輸出( 3360= 20 );elseerror(lineNum,2) /輸出“未知運(yùn)算符”錯(cuò)誤break;case (: )輸出( (,21 );break;case ):output ( )、22;break;case :output (; ),23 )break;default:error(lineNum,1 )以下返回真;以下void getPath(char* in,char* out )舉止char* namename=strrchr(in, );PS (名字!=NULL )strncpy (輸出,輸入,輸入)-strlen (名稱) 1;elsestrcpy (輸出, );以下void getFilename(char* in,char* out )舉止char* fullName;char *擴(kuò)展;全名=strrchr (in, );擴(kuò)展=strrchr (in,);PS (全名!=NULL )strncpy(out,fullName 1,strlen (full name )-1-strlen (extension ) );elsestrncpy (輸出,輸入,輸入)-strlen (擴(kuò)展);以下bool ini

溫馨提示

  • 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)論