




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、編譯原理詞法分析器實驗報告一、實驗目的:1設計、編制、調(diào)試一個詞法分析子程序識別單詞,加深對詞法分析原理的理解。2掌握在對程序設計語言的源程序掃描的過程中,將其分解后各類單詞的語法分析方法。二、實驗要求:1. 對給定的程序通過詞法分析器弄夠識別一個個單詞符號,并以二元式(單詞種別碼,單詞符號的屬性值)顯示。而本程序則是通過對給定路徑的文件的分析后以單詞符號和文字提示顯示。2. 本程序自行規(guī)定:(1)關鍵字begin,end,if,then,else,while,write,read,do, call,const,char,until,procedure,repeat(2)運算符:+,-,*,/
2、,=(3)界符:,;,.,(,),:(4)其他標記 如字符串,表示以字母開頭的標識符。(5)空格、回車、換行符跳過。在屏幕上顯示如下:( 1 , 無符號整數(shù))( begin , 關鍵字 )( if , 關鍵字 )( +, 運算符 )( ; , 界符 )( a , 普通標識符 )三、使用環(huán)境:Window vista 下的 Visual Studio 2008;四、實驗步驟1. 查詢資料,了解詞法分析器的工作過程與原理。2. 分析題目,整理出基本設計思路。3. 實踐編碼,將設計思想轉換用c語言編碼實現(xiàn),編譯運行。4.測試功能,多次設置包含不同字符,關鍵字的待解析文件,仔細察看運行結果,檢測該分析
3、器的分析結果是否正確。通過最終的測試發(fā)現(xià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.運行結果:六、程序源代碼:#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) /關鍵字判斷 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$關鍵字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按任意鍵結束a;六、實驗心得: 通過此次實驗,讓我了解到如何設計、編制并調(diào)試詞法分析程序,加深對詞法分析原理的理解;熟悉了構造詞法分析程序的手工方式的相關原理,使用某種高級語言(例如C+語言)直接編寫此法分析程序。另外,也讓我重新熟悉了C+語言的相關內(nèi)容,加深了對C+語言的用途的理解。在本次實驗中,我糾正了一個一直以來的概念錯誤:main不是關鍵字,它定義為程序的入口,是主函數(shù)!在本實驗中,雖然我把main初始化在
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 IEC TR 63309:2025 EN Active fibres – Characteristics and measurement methods – Guidance
- 2025至2030中國電鍍表配件行業(yè)深度研究及發(fā)展前景投資評估分析
- 2025至2030中國電子商務食品行業(yè)深度研究及發(fā)展前景投資評估分析
- 2025至2030中國電動尾門行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 2025至2030中國瑪瑙飾品行業(yè)市場占有率及投資前景評估規(guī)劃報告
- 技術培訓推動教師職業(yè)發(fā)展的重要動力
- 幼兒園營養(yǎng)性疾病知識培訓
- 智慧教育大數(shù)據(jù)驅動的教學效率變革
- 探索不同國家在線教育平臺的創(chuàng)新實踐
- 教育中的心理學技巧激發(fā)學生潛能的實踐
- 【MOOC】教育研究方法-浙江大學 中國大學慕課MOOC答案
- 《回歸分析》課件
- 心臟手術圍手術期
- 餐車經(jīng)營食品安全應急預案
- DB43T 876.11-2017 高標準農(nóng)田建設 第11部分:耕地地力評定技術規(guī)范
- 2024新版(外研版三起孫有中)三年級英語上冊單詞帶音標
- 2024至2030年中國漢白玉石雕數(shù)據(jù)監(jiān)測研究報告
- 三年級下冊混合計算題100道及答案
- DB12T 998-2020 殯葬服務機構消毒衛(wèi)生規(guī)范
- 廣東省廣州市五校2023-2024學年高一下學期期末聯(lián)考化學試卷
- 2024年天津高考數(shù)學真題試題(原卷版+含解析)
評論
0/150
提交評論