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

下載本文檔

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

文檔簡介

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

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

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

4、的理解、把握和編譯這一課的理解,提高了自己的本領(lǐng),在編碼過程中也遇到了很多問題。 例如,如何解決發(fā)生的文件的后端定位等,我的編碼能力在這次實驗中取得了一定的提高。十一、本實驗過程、方法和手段的改進建議首先理解字句分析器的功能和輸入輸出形式,熟練地掌握狀態(tài)遷移圖。報告分數(shù):指導(dǎo)教師簽名:實驗的參考源代碼如下所示#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;交換機(錯誤)舉止case ILLEGAL_CHAR_ERR:errInfo=非字母字符;break;case UNKNOWN_OPERATOR_ERR:errInfo=未知運算符;break;默認:errInfo=未知錯誤;以下PS (PS, *line:%d%sn ,lineNum,errInfo)=

8、0)返回真;else返回假;以下bool LexAnalyze ()舉止靜態(tài)線性=1;char character;char token17=;character=getnbc ();交換機(字符)。舉止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) /輸出“未知運算符”錯誤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 *擴展;全名=strrchr (in, );擴展=strrchr (in,);PS (全名!=NULL )strncpy(out,fullName 1,strlen (full name )-1-strlen (extension ) );elsestrncpy (輸出,輸入,輸入)-strlen (擴展);以下bool ini

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論