




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、編譯原理詞法分析器實驗報告一、實驗?zāi)康模?設(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(2)運算符:+,-,*,/
2、,=(3)界符:,;,.,(,),:(4)其他標記 如字符串,表示以字母開頭的標識符。(5)空格、回車、換行符跳過。在屏幕上顯示如下:( 1 , 無符號整數(shù))( begin , 關(guān)鍵字 )( if , 關(guān)鍵字 )( +, 運算符 )( ; , 界符 )( a , 普通標識符 )三、使用環(huán)境:Window vista 下的 Visual Studio 2008;四、實驗步驟1. 查詢資料,了解詞法分析器的工作過程與原理。2. 分析題目,整理出基本設(shè)計思路。3. 實踐編碼,將設(shè)計思想轉(zhuǎn)換用c語言編碼實現(xiàn),編譯運行。4.測試功能,多次設(shè)置包含不同字符,關(guān)鍵字的待解析文件,仔細察看運行結(jié)果,檢測該分析
3、器的分析結(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; else n=n+1;if (n2) then n=n+2; else n=n-2;2.運行結(jié)果:六、程序源代碼:#include
4、#includeusing namespace std;#define MAX 22 char ch = ;string key15=begin,end,if,then,else,while,write,read,do, call,const,char,until,procedure,repeat;int Iskey(string c) /關(guān)鍵字判斷 int i; for(i=0;iMAX;i+) if(pare(c)=0) return 1; return 0;int IsLetter(char c) /判斷是否為字母 if(c=a)|(c=A) return 1; else
5、 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) arr=; if(ch= |ch=t|ch=n) else if(IsLetter(ch) while(IsLetter(ch)|IsDigit(ch) if(ch=A) ch=ch+32; arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); if (Iskey(
6、arr)coutarrt$關(guān)鍵字endl; else coutarrt$普通標識符endl; else if(IsDigit(ch) while(IsDigit(ch)|ch=.&IsDigit(fgetc(fpin) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR); coutarrt$無符號實數(shù)endl; else switch(ch) case+: case- : case* : case= : case/ :coutcht$運算符endl;break; case( : case) : case : case : case; : c
7、ase. : case, : case : case :coutcht$界符endl;break; case: :ch=fgetc(fpin); if(ch=) cout:=t$運算符endl; else cout=t$運算符 :ch=fgetc(fpin); if(ch=) cout=t$運算符)coutt$輸入控制符endl; else coutt$運算符endl; fseek(fpin,-1L,SEEK_CUR); break; case :ch=fgetc(fpin); if(ch=)cout=t$運算符endl; else if(ch=)coutt$輸出控制符) coutt$運算符e
8、ndl; elsecoutt$運算符endl; fseek(fpin,-1L,SEEK_CUR); break; default : coutcht$無法識別字符endl; void main() char in_fn30; FILE * fpin; coutin_fn; if(fpin=fopen(in_fn,r)!=NULL) break; else cout文件路徑錯誤!請輸入源文件名(包括路徑和后綴名):; coutn*分析如下*endl; analyse(fpin); fclose(fpin); coutendl; cout按任意鍵結(jié)束a;六、實驗心得: 通過此次實驗,讓我了解到如何設(shè)計、編制并調(diào)試詞法分析程序,加深對詞法分析原理的理解;熟悉了構(gòu)造詞法分析程序的手工方式的相關(guān)原理,使用某種高級語言(例如C+語言)直接編寫此法分析程序。另外,也讓我重新熟悉了C+語言的相關(guān)內(nèi)容,加深了對C+語言的用途的理解。在本次實驗中,我糾正了一個一直以來的概念錯誤:main不是關(guān)鍵字,它定義為程序的入口,是主函數(shù)!在本實驗中,雖然我把main初始化在
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 石家莊試卷小學(xué)英語
- 語文-福建省龍巖市2025年高中畢業(yè)班三月教學(xué)質(zhì)量檢測(龍巖一檢)試題和答案
- 盤錦水洗石施工方案
- 綠化駁岸施工方案
- 紅外報警系統(tǒng)施工方案
- 2025年蒙氏數(shù)學(xué)區(qū)別上下標準教案
- 2025屆山東省泰安市肥城市中考適應(yīng)性考試生物試題含解析
- 取消銷售合同范本
- 合伙餐飲合同范例多人
- 2013版裝修合同范例
- 中國兒童呼吸道合胞病毒感染診療及預(yù)防指南(2024)解讀
- 本科畢業(yè)生登記表自我鑒定范文(8篇)
- 腦梗塞的急救護理
- 二零二四年度幼兒園學(xué)生午餐配送合同
- 讀后續(xù)寫+摯友離別:不舍與成長交織的瞬間+講義 高一上學(xué)期期中聯(lián)考英語試題
- 2024中華人民共和國學(xué)前教育法學(xué)習(xí)解讀課件
- 2024-2030年中國飾面板行業(yè)發(fā)展狀況及前景趨勢研究報告
- 企業(yè)智能云盤方案之AI知識庫應(yīng)用
- 春季傳染病預(yù)防課件動態(tài)課件
- 家居家具保養(yǎng)與清潔指導(dǎo)書
- 2023年員工手冊范本(適用于公司全體員工手冊)
評論
0/150
提交評論