南昌大學編譯原理實驗報告一_第1頁
南昌大學編譯原理實驗報告一_第2頁
南昌大學編譯原理實驗報告一_第3頁
南昌大學編譯原理實驗報告一_第4頁
南昌大學編譯原理實驗報告一_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、南昌大學實驗報告一實驗類型:驗證 綜合設計 創(chuàng)新 實驗日期:2013.4 實驗成績: 詞法分析程序設計一、實驗目的掌握計算機語言的詞法分析程序的開發(fā)方法。 二、實驗內(nèi)容編制一個能夠分析三種整數(shù)、標識符、主要運算符和主要關鍵字的詞法分析程序。三、實驗要求1、根據(jù)狀態(tài)圖,設計詞法分析函數(shù)int scan( ),完成以下功能:1) 從文本文件中讀入測試源代碼,根據(jù)狀態(tài)轉換圖,分析出一個單詞,2) 以二元式形式輸出單詞<單詞種類,單詞屬性>其中單詞種類用整數(shù)表示:0:標識符1:十進制整數(shù)2:八進制整數(shù)3:十六進制整數(shù)運算符和界符,關鍵字采用一字一符,不編碼其中單詞屬性表示如下:標

2、識符,整數(shù)由于采用一類一符,屬性用單詞表示運算符和界符,關鍵字采用一字一符,屬性為空2、編寫測試程序,反復調(diào)用函數(shù)scan( ),輸出單詞種別和屬性。 四、實驗環(huán)境PC微機DOS操作系統(tǒng)或 Windows 操作系統(tǒng)Turbo C 程序集成環(huán)境或 Visual C+ 程序集成環(huán)境 五、實驗步驟編輯一個文本文件program.txt,在文件中輸入如下內(nèi)容:if data+92>0x3f thendata=data+01;elsedata=data-01; 正確結果:<if , -><0 , data><+ , -><1 , 92&

3、gt;<> , -><3 , 3f><then , -><0 , data><= , ><0 , data><+ , -><2 , 1>< ,-><else , -><0 , data><= , -><0 , data><- , -><2 , ->< , ->【實驗代碼】#include <iostream>#include<string>using namespace st

4、d;#define MAX 5 char ch =' 'string key5="if","then","else","while","do"int Iskey(string c) /關鍵字判斷 int i; for(i=0;i<MAX;i+) if(pare(c)=0) return 1; return 0;int IsLetter(char c) /判斷是否為字母 if(c<='z')&&(c>='a&

5、#39;)|(c<='Z')&&(c>='A') return 1; else return 0;int IsLetter1(char c) /判斷是否為af字母 if(c<='f')&&(c>='a')|(c<='F')&&(c>='A') return 1; else return 0;int IsDigit(char c) /判斷是否為數(shù)字 if(c>='0'&&c<

6、='9') return 1; else return 0;void scan(FILE *fpin) string arr="" while(ch=fgetc(fpin)!=EOF) arr="" if(ch=' '|ch='t'|ch='n') else if(IsLetter(ch)|ch='_') arr=arr+ch; ch=fgetc(fpin); while(IsLetter(ch)|IsDigit(ch) if(ch<='Z')&

7、&(ch>='A') ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)cout<<arr<<"t$關鍵字"<<endl; else cout<<arr<<"t$普通標識符"<<endl; else if(IsDigit(ch) int flag=0;if(ch='0')arr=arr+ch;ch=fgetc(fpin);if(ch&

8、gt;='0'&&ch<='7') while(ch>='0'&&ch<='7') flag=1; arr=arr+ch; ch=fgetc(fpin);else if(ch='x'|ch='X')flag=2;arr=arr+ch; ch=fgetc(fpin);while(IsDigit(ch)|IsLetter1(ch) arr=arr+ch; ch=fgetc(fpin);else if(ch=' '|ch=',

9、9;|ch='' )cout<<arr<<"t$整數(shù)0"<<endl;fseek(fpin,-1L,SEEK_CUR); if(flag=1) cout<<arr<<"t$八進制整數(shù)"<<endl;else if(flag=2) cout<<arr<<"t$十六進制整數(shù)"<<endl; else arr=arr+ch;ch=fgetc(fpin);while(IsDigit(ch) arr=arr+ch; ch=

10、fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); cout<<arr<<"t$十進制整數(shù)"<<endl; else switch(ch) case'+': case'-' : case'*' : case'=' : case'/' :cout<<ch<<"t$運算符"<<endl;break; case'(' : case')' : case&#

11、39;' : case'' : case'' : case'.' : case',' : case'' : case'' :cout<<ch<<"t$界符"<<endl;break; case':' :ch=fgetc(fpin); if(ch='=') cout<<":="<<"t$運算符"<<endl; else cout&l

12、t;<":"<<"t$界符"<<endl; fseek(fpin,-1L,SEEK_CUR); break; case'>' :ch=fgetc(fpin); if(ch='=') cout<<">="<<"t$運算符"<<endl; if(ch='>')cout<<">>"<<"t$輸入控制符"<<

13、;endl; else cout<<">"<<"t$運算符"<<endl; fseek(fpin,-1L,SEEK_CUR); break; case'<' :ch=fgetc(fpin); if(ch='=')cout<<"<="<<"t$運算符"<<endl; else if(ch='<')cout<<"<<"<<

14、"t$輸出控制符"<<endl; else if(ch='>') cout<<"<>"<<"t$運算符"<<endl; elsecout<<"<"<<"t$運算符"<<endl; fseek(fpin,-1L,SEEK_CUR); break; default : cout<<ch<<"t$無法識別字符"<<endl; void main() char in_fn30; FILE * fpin; cout<<"請輸入源文件名(包括路徑和后綴名):" for(;) cin>>in

溫馨提示

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

最新文檔

評論

0/150

提交評論