編譯原理詞法分析器的構造(共9頁)_第1頁
編譯原理詞法分析器的構造(共9頁)_第2頁
編譯原理詞法分析器的構造(共9頁)_第3頁
編譯原理詞法分析器的構造(共9頁)_第4頁
編譯原理詞法分析器的構造(共9頁)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、PAGE 實 驗 報 告(2014 / 2015 學年(xunin) 第 一 學期(xuq))課程名稱編譯原理實驗名稱詞法分析器的構造實驗時間2015年4月10日指導單位南京郵電大學指導教師蔣凌云學生姓名孫雪祿班級學號B12041213學院(系)計算機學院、軟件學院專 業軟件工程(服務外包)PAGE - 8 -實 驗 報 告實驗名稱詞法分析器的構造指導教師蔣凌云實驗類型上機實驗實驗學時4實驗時間2015.4.10實驗目的和要求 設計、編制、調試一個詞法分析程序,對單詞進行識別和編碼,加深對詞法分析原理的理解。二、實驗環境(實驗設備) Microsoft Visual Stdio 2010實驗原

2、理及內容 1、實驗內容:設計并實現一個詞法分析器,實現對指定位置的類C語言源程序文本文件的讀取,并能夠對該源程序中的所有單詞進行分類,指出其所屬類型,實現簡單的詞法分析操作。例如下面為一段C語言源程序:main() int a,b; a = 10; b = a + 20;要求輸出如下(可以自行分類,分類原則請在報告中說明)(1,main)(5,()(5,)(5, )(1,int)(2,a)(5,,)(2,b)(5,;)(2,a)(4,=)(3,10)(5,;)(2,b)(4,=)(2,a)(4,+)(3,20)(5,;)(5,) 2、實驗要求:(1)、允許用戶自己輸入源程序并保存為文件(2)、

3、系統能夠輸出經過預處理后的源程序(去掉注釋、換行、空格等)(3)、能夠將該源程序中所有的單詞根據其所屬類型(整數、保留字、運算符、標識符等。定義的類C語言中的標識符只能以字母或下劃線開頭)進行歸類顯示,例如:識別保留字:if、int、for、while、do、return、break、continue等,其他的都識別為標識符;常數為無符號整形數;運算符包括:+、-、*、/、=、=、,=等)5分隔符(,,;,(,))(2)、接著寫出用到的簡單文法并轉換成狀態轉換圖:=字母|字母|數字031字母非數字或字母字母或數字數字數字非數字+-*/=, ; ( ) :=數字|數字:=+|-|*|=:=,|;

4、|(|)|保留字是一種特殊的標識符,不獨立寫出其文法031字母非數字或字母字母或數字數字數字非數字+-*/=a&A=A&A=0&A=9)return true;elsereturn false;bool REAERVE(char *a) /判斷標識符是否為保留字if(strcmp(a,if)=0)cout(1,a)endl;return true;if(strcmp(a,int)=0)cout(1,a)endl;return true;if(strcmp(a,for)=0)cout(1,a)endl;return true;if(strcmp(a,while)=0)cout(1,a)endl;

5、return true;if(strcmp(a,do)=0)cout(1,a)endl;return true;if(strcmp(a,return)=0)cout(1,a)endl;return true;if(strcmp(a,break)=0)cout(1,a)endl;return true;if(strcmp(a,continue)=0)cout(1,a)endl;return true;if(strcmp(a,main)=0)cout(1,a)endl;return true;return false;下面附上全部的代碼:#include #include #include usi

6、ng namespace std;bool LETTER(char A) if(A=a&A=A&A=0&A=9)return true;elsereturn false;bool REAERVE(char *a)if(strcmp(a,if)=0)cout(1,a)endl;return true;if(strcmp(a,int)=0)cout(1,a)endl;return true;if(strcmp(a,for)=0)cout(1,a)endl;return true;if(strcmp(a,while)=0)cout(1,a)endl;return true;if(strcmp(a,d

7、o)=0)cout(1,a)endl;return true;if(strcmp(a,return)=0)cout(1,a)endl;return true;if(strcmp(a,break)=0)cout(1,a)endl;return true;if(strcmp(a,continue)=0)cout(1,a)endl;return true;if(strcmp(a,main)=0)cout(1,a)=A&A=a&A=z)return true;return false;int main()char a;FILE *f;char CHAR;char TOKEN120;f=fopen(co

8、de.txt,w);if(f=NULL)coutcont create fileendl;exit(0);coutplease input you codeendl;while(a=getchar()!=?)fputc(a,f);fclose(f);coutoverendl;f=fopen(code.txt,r);while(CHAR=fgetc(f)!=EOF)while(CHAR!= )if(zimu(CHAR)/標括?識?符?int k=0;doTOKENk=CHAR;k+;while(CHAR=fgetc(f)!=EOF&CHAR!= &zimu(CHAR);if(DIGIT(CHAR

9、)/處鋦理?是?否?為a包悒?含?數簓字?的?標括?識?符?doTOKENk=CHAR;k+;while(CHAR=fgetc(f)!=EOF&CHAR!= &DIGIT(CHAR);TOKENk=0;if(!(REAERVE(TOKEN)/判D斷?所得?標括?識?符?是?否?為a保饋?留?字?cout(2,TOKEN)endl;if(DIGIT(CHAR) /整?數簓int i=0;doTOKENi=CHAR;i+;while(CHAR=fgetc(f)!=EOF&CHAR!= &DIGIT(CHAR);TOKENi=0;if(!REAERVE(TOKEN)cout(3,TOKEN)|CHA

10、R=|CHAR=) /運?算?符?cout(4,CHAR)endl;if(CHAR=,|CHAR=;|CHAR=(|CHAR=)|CHAR=|CHAR=) /分?隔?符?cout(5,CHAR)endl;break;fclose(f);cout按恪?任?意癮鍵退?出?CHAR;return 0;測試結果:文件存儲在code.txt文件中四、實驗小結(包括問題和解決方法、心得體會、意見與建議等) 這次實驗讓我們更加了解詞法分析程序的原理,熟悉了書上詞法分析程序構建的步驟,也強化了我們的編程能力,比如說文件讀寫操作。在我的程序中,思考了很久也沒能實現”=”和”!=”的詞法分析。拿”=”舉例來說,CHAR讀了”之后,進行判斷如果是”=”就輸出“(4,=)”。但是如果接下來的字符不是”=”,就需要判斷這個CHAE字符是否為字母、數字、分隔符、其他運算

溫馨提示

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

評論

0/150

提交評論