C++詞法分析器_第1頁
C++詞法分析器_第2頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 張雅梅() 一、實驗?zāi)康模?1設(shè)計、編制、調(diào)試一個詞法分析子程序識別單詞,加深對詞法 分析原理的理解。 2掌握在對程序設(shè)計語言的源程序掃描的過程中,將其分解后各類 單詞的語法分析方法。 二、實驗要求: 1. 對給定的程序通過詞法分析器弄夠識別一個個單詞符號,并以二 元式 (單詞種別碼,單詞符號的屬性值 )顯示。而本程序則是通過對給 定路徑的文件的分析后以單詞符號和文字提示顯示。 2. 本程序自行規(guī)定: (1)關(guān)鍵字 begin,end,if,then,else,while,write,read, do, call,const,char,until,procedure,repeat (4)其他

2、標記 如字符串,表示以字母開頭的標識符 (5)空格、回車、換行符跳過。 在屏幕上顯示如下: ( 1 , 無符號整數(shù) ) ( begin , 關(guān)鍵字 ) 編譯原理 詞法分析器實驗報告 (2)運算符: +,-,*,/,= (3)界符: ,;,. ( if , 關(guān)鍵字 ) ( +, 運算符 ) ( ; , 界符 ) ( a , 普通標識符 ) 三、使用環(huán)境: Window vista 下的 Visual Studio 2008; 四、實驗步驟 1. 查詢資料,了解詞法分析器的工作過程與原理。 2. 分析題目,整理出基本設(shè)計思路。 3. 實踐編碼,將設(shè)計思想轉(zhuǎn)換用 c 語言編碼實現(xiàn),編譯運行。 4.

3、測試功能,多次設(shè)置包含不同字符,關(guān)鍵字的待解析文件,仔細察 看運行結(jié)果, 檢測該分析器的分析結(jié)果是否正確。 通過最終的測試發(fā) 現(xiàn)問題, 逐漸完善代碼中設(shè)置的分析對象與關(guān)鍵字表, 拓寬分析范圍 提高分析能力。 五、流程圖 五、調(diào)試程序: 1.舉例說明 文件位置: C:TEST.txt 目標程序如下: Int main()? ? i=10; j=100; n=1; sum=0; mult=1; while (i0) n=n+1;i=i-1; if (j=50) then sum=sum+j; else mult=mult*(j+1);sum=sum+i; if (i1) then n=n-1; e

4、lse n=n+1; if (n2) then n=n+2; else n=n-2; 2.運行結(jié)果: 六、程序源代碼: #include #include using namespacestd; #define MAX 22 char ch = ; string key15= begin , end ,if , then , else , while , write , read , do , call , const , char , until , procedure , repeat ;int i; for (i=0;iMAX;i+) if (pare(c)=0) return 1; i

5、nt Iskey(string c) / 關(guān)鍵字判斷 return 0; int IsLetter( char c) / 判斷是否為字母 if (c=a )|(c=A ) else return 0; int IsDigit( char c) / 判斷是否為數(shù)字 if (c= 0 &c=9 ) return 1; else return 0; void analyse(FILE *fpin) string arr= ; while (ch=fgetc(fpin)!=EOF) if (ch= |ch= t |ch= n ) else if (IsLetter(ch) while (IsL

6、etter(ch)|IsDigit(ch) return 1; if (ch=A ) ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)coutarr t$ 關(guān)鍵字 endl; else coutarr t$ 普通標識符 endl; else if (IsDigit(ch) while (IsDigit(ch)|ch= . &IsDigit(fgetc(fpin) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); couta

7、rr t$ 無符號實數(shù) w蘋 casp-y HO&AAO-AA蘋 UAAend-八 break 八 easy 幾 chHfgefc(fpin= if (Chun ) COUAC =-H= AAS*蘋 UAAend-八 e-se 宀 COUAC =H= AA/fsw蘋 = AAend-r: fseek(fpin1 廠 SEEKICUR) ) break - case.v 八 chHfgefc(fpin= if (ch= )cout t$ 輸入控 制符 endl; else cout t$ 運算符 endl; fseek(fpin,-1L,SEEK_CUR); break ; case :

8、ch=fgetc(fpin); if (ch= = )cout = t$ 運算符 endl; else if (ch= )cout t$ 輸 出控制符 ) cout t$ 運 算符 endl; else cout t$ 運算符 endl; fseek(fpin,-1L,SEEK_CUR); break ; default : coutch t$ 無法識別字符 endl; void main() char in_fn30; FILE * fpin; coutin_fn; if (fpin=fopen(in_fn, r )!=NULL) break ; else cout 文件路徑錯誤!請輸入源文

9、件名(包括路徑和 后綴名) : ; * endl; analyse(fpin); fclose(fpin); coutendl; cout 按任意鍵結(jié)束 a; 六、實驗心得: ? ?通過此次實驗,讓我了解到如何設(shè)計、編制并調(diào)試詞法分析程序, 加深對詞法分析原理的理解; 熟悉了構(gòu)造詞法分析程序的手工方式的 相關(guān)原理,使用某種高級語言(例如 C+語言)直接編寫此法分析程 序。另外,也讓我重新熟悉了 C+語言的相關(guān)內(nèi)容,加深了對 C+語 言的用途的理cout 分析如下 解。在本次實驗中,我糾正了一個一直以來的概念錯誤: main 不是關(guān)鍵字,它定義為程序的入口,是主函數(shù)!在本實驗中, 雖然我把 main 初始化在關(guān)鍵字表 (字

溫馨提示

  • 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

提交評論