




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、計算機編譯原理實驗 班級:計算機科學與技術113班 姓名: 學號:南昌大學信息工程學院計算機系實驗1 詞法分析程序的設計一、實驗目的掌握計算機語言的詞法分析程序的開發方法。 二、實驗內容編制一個能夠分析三種整數、標識符、主要運算符和主要關鍵字的詞法分析程序。三、實驗要求1、根據以下的正規式,編制正規文法,畫出狀態圖;標識符<字母>(<字母>|<數字字符>)*十進制整數0 |(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*如有余力,則進一步分析八進制和十六進制整數,其正規式如下:八進制整數 0(1|2|3|4|5|6
2、|7)(0|1|2|3|4|5|6|7)*十六進制整數0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*運算符和界符+ - * / > < = <= >= ( ) ; 關鍵字main if then else while do int (可根據需要添加)2、根據狀態圖,設計詞法分析函數int scan( ),完成以下功能:1) 從文本文件中讀入測試源代碼,根據狀態轉換圖,分析出一個單詞,2) 以二元式形式輸出單詞<單詞種類,單詞屬性>其中單詞種類用整數表示:0:標識符1:
3、十進制整數2:八進制整數3:十六進制整數運算符和界符,關鍵字采用一字一符,不編碼其中單詞屬性表示如下:標識符,整數由于采用一類一符,屬性用單詞表示運算符和界符,關鍵字采用一字一符,屬性為空3、編寫測試程序,反復調用函數scan( ),輸出單詞種別和屬性。 四、實驗環境PC微機DOS操作系統或 Windows 操作系統Turbo C 程序集成環境或 Visual C+ 程序集成環境 五、實驗步驟1、 根據正規式,畫出狀態轉換圖;2、 根據狀態圖,設計詞法分析算法;3、 采用C或C+語言,設計函數scan( ),實現該算法;4、 編制測試程序(主函數main);5、調試程序:讀
4、入文本文件program.txt,運行程序得到輸出結果result.txt,并檢查輸出結果是否正確。 六、測試數據 輸入數據:編輯一個文本文件program.txt,在文件中輸入一段程序代碼,如:if data+92>0x3f thendata=data+01;elsedata=data-01; 將輸出結果存放在result.txt文件中,輸出格式如下:<if , -><0 , data><+ , -><1 , 92><> , -><3 , 3f><then , -><0 , dat
5、a><= , -><0 , data><+ , -><2 , 1>< ,-><else , -><0 , data><= , -><0 , data><- , -><2 , ->< , ->七、實驗報告要求實驗報告應包括以下幾個部分:1、詞法的正規式描述;2、變換后的狀態圖;3、詞法分析程序的數據結構與算法?!驹闯绦颉?include <iostream>#include<string>using namespace st
6、d;#define LENGTH 5 char ch =' 'string key5="if","then","else","while","do"int Iskey(string c) /關鍵字判斷 int i; for(i=0;i<LENGTH;i+) if(pare(c)=0) return 1; return 0;int IsLetter(char c) /判斷是否為字母 if(c<='z')&&(c>=&
7、#39;a')|(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 IsNum(char c) /判斷是否為數字 if(c>='0'&&c
8、<='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)|IsNum(ch) if(ch<='Z')&am
9、p;&(ch>='A') ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); if (Iskey(arr)cout<<"<"<<arr<<",關鍵字>"<<endl; else cout<<"<"<<arr<<",普通標識符>"<<endl; else if(IsNum(ch) int fla
10、g=0;if(ch='0')arr=arr+ch;ch=fgetc(fpin);if(ch>='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(IsNum(ch)|IsLetter1(ch) arr=arr+ch
11、; ch=fgetc(fpin);else if(ch=' '|ch=','|ch='' )cout<<"<"<<arr<<",整數0>"<<endl;fseek(fpin,-1L,SEEK_CUR); if(flag=1) cout<<"<"<<arr<<",八進制整數>"<<endl;else if(flag=2) cout<<&qu
12、ot;<"<<arr<<",十六進制整數>"<<endl; else arr=arr+ch;ch=fgetc(fpin);while(IsNum(ch) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); cout<<"<"<<arr<<",十進制整數>"<<endl; else switch(ch) case'+': case'-'
13、; : case'*' : case'=' : case'/' :cout<<"<"<<ch<<",運算符>"<<endl;break; case'(' : case')' : case'' : case'' : case'' : case'.' : case',' : case'' : case'' :c
14、out<<"<"<<ch<<",界符>"<<endl;break; case':' :ch=fgetc(fpin); if(ch='=') cout<<"<"<<":="<<",運算符>"<<endl; else cout<<"<"<<":"<<",界符&
15、gt;"<<endl; fseek(fpin,-1L,SEEK_CUR); break; case'>' :ch=fgetc(fpin); if(ch='=') cout<<"<"<<">="<<",運算符>"<<endl; if(ch='>')cout<<"<"<<">>"<<",輸入
16、控制符>"<<endl; else cout<<"<"<<">"<<",運算符>"<<endl; fseek(fpin,-1L,SEEK_CUR); break; case'<' :ch=fgetc(fpin); if(ch='=')cout<<"<"<<"<="<<",運算符>"<&l
17、t;endl; else if(ch='<')cout<<"<"<<"<<"<<",輸出控制符>"<<endl; else if(ch='>') cout<<"<"<<"<>"<<",運算符>"<<endl; elsecout<<"<"<<"<"<<",運算符>"<<endl; fseek(fpin,-1L,SEEK_CUR); break; default : cout<<"<"<<ch<<",無法識別字符>"<<endl; void main() char in_fn30; FILE * fpin; cout<<"請輸入文件路徑及文件名:" for(;) cin>>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新疆應用職業技術學院《風景園林規劃設計》2023-2024學年第一學期期末試卷
- 湘潭醫衛職業技術學院《環境土壤學》2023-2024學年第二學期期末試卷
- 宮頸腫瘤的病理學課件
- 2025至2031年中國檔發行業投資前景及策略咨詢研究報告
- 2025汽車購車貸款合同范本
- 鄭州商學院《高分子科學基礎》2023-2024學年第二學期期末試卷
- 超聲基礎原理知識
- 樓盤房屋銷售方案范本
- 2025標準中介房屋租賃合同(版)
- 2025至2031年中國后腳踏行業投資前景及策略咨詢研究報告
- 物聯網通信技術課件
- HR用工風險課件
- 集成電路制造技術原理與工藝第3版田麗課后參考答案
- 護理給藥制度課件
- 輥涂型卷煙接嘴膠動態流變性能對其上機適用性的影響
- 攪拌站安全生產檢查與隱患排查表格清單
- 智能化巖土工程監測
- 保潔服務投標方案(技術標)
- JGJ103-2008 塑料門窗工程技術規程
- 野獸派油畫欣賞課件
- 淺論文淺談跆拳道對青少年身心健康的影響
評論
0/150
提交評論