



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、專業資料實驗一詞法分析設計實驗學時: 4實驗類型:綜合實驗要求:必修一、實驗目的通過本實驗的編程實踐, 使學生了解詞法分析的任務, 掌握詞法分析程序設計的原理和構造方法, 使學生對編譯的基本概念、 原理和方法有完整的和清楚的理解,并能正確地、熟練地運用。二、實驗內容用 VC+/VB/JAVA語言實現對 C 語言子集的源程序進行詞法分析。通過輸入源程序從左到右對字符串進行掃描和分解, 依次輸出各個單詞的內部編碼及單詞符號自身值; 若遇到錯誤則顯示“ Error ”, 然后跳過錯誤部分繼續顯示 ;同時進行標識符登記符號表的管理。以下是實現詞法分析設計的主要工作:( 1)從源程序文件中讀入字符。(
2、2)統計行數和列數用于錯誤單詞的定位。( 3)刪除空格類字符,包括回車、制表符空格。( 4)按拼寫單詞,并用(內碼,屬性)二元式表示。( 屬性值 token 的機內表示 )( 5)如果發現錯誤則報告出錯( 6)根據需要是否填寫標識符表供以后各階段使用 。單詞的基本分類:關鍵字:由程序語言定義的具有固定意義的標識符。也稱為保留字例如if 、for、while 、printf;單詞種別碼為 1。標識符:用以表示各種名字,如變量名、數組名、函數名;常數: 任何數值常數。如 125, 1,0.5,3.1416 ;運算符: +、- 、* 、/ ;關系運算符: 、 、=、 ;分界符:; 、, 、(、) 、
3、 、 ;三、實驗要求1、編程時注意編程風格:空行的使用、注釋的使用、縮進的使用等。2、將標識符填寫的相應符號表須提供給編譯程序的以后各階段使用。3、根據測試數據進行測試。測試實例應包括以下三個部分:全部合法的輸入。各種組合的非法輸入。由記號組成的句子。WORD完美格式下載可編輯專業資料4、詞法分析程序設計要求輸出形式:例:輸入 VC+語言的實例程序:If i=0 thenn+;a= 3b %);輸出形式為:單詞二元序列類 型位置(行,列)(單詞種別,單詞屬性)for(1,for )關鍵字(1,1)i( 6,i )標識符(1,2)=( 4, = )關系運算符(1,3)0( 5, 0 )常數(1,
4、4)then( 1, then)關鍵字(1,5)n(6,n )標識符(1,6)+ErrorError( 1,7);(2,;)分界符(1,8)a(6,a )標識符(2,1) =(4,= )關系運算符(2,2)3bErrorError( 2,4)%ErrorError(2,4))(2,)分界符(2,5);(2,;)分界符(2,6)實驗報告正文 :功能描述:該程序具有詞法分析功能, 即面對一段程序源代碼, 通過該程序,能檢查出源代碼是否由詞法錯誤。三、詞法分析實驗設計思想及算法:首先構造六個表,key=auto,break,case,catch,char,class,const,continue,d
5、efault,delete,do,double,else,enum,float,for,if,int,long,new,private,protected,public,register, return,short,static,struct,switch,this,void,while, then; 關鍵字表 , 單詞種別碼 1;Delimiter=;,(,),.,;分界符表單詞種別碼WORD完美格式下載可編輯專業資料2Operator=+,-,*,/;算術運算符表單詞種別碼 3R_operators=,=,關鍵字表 ,單詞種別碼 1;string Number100;常數表單詞種別碼 5;
6、string Identifier100;標示符表單詞種別碼 6;構造關鍵字判斷函數Iskey(),字母判斷函數 Isletter(),數字判斷函數Isnumber();構造標示符判別函數InsertId(),若輸入的標示符在標示符數組Identifier中,返回其下標,若不在,將該標示符插到數組末尾。構造標示符判別函數InsertNumber(),若輸入的數字在數字數組Number 中,返回其下標,若不在,將該數字插到數組末尾。具體分析函數 analyse() 具體實現輸入源代碼的識別。anaiyse() 構造思路,程序設計圖:綜合以上分析,畫出整個程序的運行分析程序圖,如下:WORD完美格
7、式下載可編輯開始輸入源文件路徑專業資料路徑是否有效是打開源文件初始化文件指針識別指針內容文件結束?否是空格,空白或換行嗎是跳過該字符指向下一字符回退輸出word為普通標示符否是否是字母嗎是將字符加入字符數組Word指向下一字符是字母惑數字嗎否將word與關鍵字表key進行匹配否匹配?是輸出word為關鍵字結束否是數字嗎否是界符嗎將字符加是入字符數將字符組Word加入字符數組是Word指向下一字符是識別指針內容輸出word為界符是數字嗎否輸出word指向下一字符為常數將字符加入字符數否組Word將字符加入字符數組Word輸出 Word內容為不可識別整個程序的運行分析程序圖WORD完美格式下載可編
8、輯專業資料軟件的測試方法和測試結果:首先,將要分析的源代碼寫入一個文本,存于磁盤中,然后運行程序,輸入源代碼文件存放的路徑, 若輸入路徑正確, 程序將自動分析源代碼, 若輸入路徑不正確,程序將顯示,路徑錯誤,請重新輸入的提示。下面為具體的運行實例:源代碼為: If i=0 thenn+;a= 3b %)輸出滿足要求。實驗總結(設計的特點、不足、收獲與體會) :通過此次實驗,讓我了解到如何設計、編制并調試詞法分析程序,熟悉了構造詞法分析程序的手工方式的相關原理, 加深了對編譯原理詞法分析的理解, 本次使用 C+語言直接編寫此法分析程序, 也讓我重新熟悉了 C+語言的相關內容,加深了對 C+語言的
9、用途的理解。本程序的數據輸入采取直接從文件中讀取,而不是由鍵盤輸入, 因此在測試過程中, 輸入得到大大簡化, 但是本程序的關鍵字表只初始化了一部分關鍵字, 還可繼續擴充 (只需擴大數組, 向其中補充要添加的關鍵字),而且程序的測試數據存在不足,程序可能存在未發現的漏洞,以上兩點有待改善。WORD完美格式下載可編輯專業資料附錄該程序的源代碼:#include #includeusing namespace std;/ 數據定義#define MAX 33char ch = ;static int line=1,row=0;int NumberCount=0,IdCount=0;stringkey
10、=auto,break,case,catch,char,class,const,continue,default,delete,do,double,else,enum,float,for,if,int,long,new,private,protected,public,register,return,short,static,struct,switch,this,void,while,then;/ 關鍵字表 單詞種別碼1stringDelimiter=;,(,),.,;/分界符表單詞種別碼2string Operator=+,-,*,/;/算術運算符表單詞種別碼3stringR_operato
11、rs=,=;/ 關系運算符表單詞種別碼4string Number100;/常數表單詞種別碼5 string Identifier100;/ 標示符表 單詞種別碼6/ 數據分析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) if(ch=A)ch=ch+32; /轉換成小寫return 1;else return 0;int IsNumber(char c)/判斷是否為數字i
12、f(c=0&c=9) return 1;else return 0;/ 將arr 中的標示符插入符號并表且返回符號表的指針int InsertId(string s)for(int i=0;iIdCount;i+)if(Identifieri=s)return i;break;else if(IdCount=i+1)IdentifierIdCount=s;return IdCount;IdCount+;/ 將arr 中的常實數插入常數表并且返回常數表的指針int InsertNumber(string s)for(int i=0;iNumberCount;i+)if(Numberi=s)ret
13、urn i;break;else if(NumberCount=i+1) NumberNumberCount=s; return NumberCount;NumberCount+;void analyse(FILE *fpin)/arr 相當于課本中的strTokenstring arr=;while(ch=fgetc(fpin)!=EOF) / 判斷WORD完美格式下載可編輯專業資料是否讀取到文件末尾或者讀取出錯arr=;while(IsNumber(ch)/|ch=.&IsNumbeif(ch=r(fgetc(fpin)|ch=t|ch=n)/ 刪除空格類字符,包括回車、制表符空格arr=
14、arr+ch;ch=fgetc(fpin);if(ch=n)line+;if(IsLetter(ch)row=0;while(IsLetter(ch)|IsNumber(ch)else if(IsLetter(ch)arr=arr+ch;ch=fgetc(fpin);while(IsLetter(ch)|IsNumber(ch)fseek(fpin,-1L,SEEK_CUR);arr=arr+ch;row+;ch=fgetc(fpin);tt(line,row)endl;fseek(fpin,-1L,SEEK_CUR);/文件指針回移else一個位置if (Iskey(arr)InsertNu
15、mber(arr);row+; /識別row+; /識別出一出一個字符,列增加一個字符,列增加一coutarrtt( 1,arr)coutarrtt( 5,arr)tttt 關鍵常數字tt(line,row)tt(line,row)endl;endl;/處理算符elseelserow+;arr=ch;row+; / 識別出一switch(ch)個字符,列增加一case+:InsertId(arr);ch=fgetc(fpin);if(ch=(|IsNumber(ch)|IsLetter(ch)tt 標識符tt(line,row)endl;fseek(fpin,-1L,SEEK_CUR);cou
16、t+tt( 3,+ )tt算術運算符/ 處理常數tt(line,row)endl;else if(IsNumber(ch)elseWORD完美格式下載可編輯專業資料coutarr+chttErrorttErrortt 分界符tt(line,row)endl;tt(line,row):ch=fgetc(fpin);if(ch=)cout=)if(ch=(|IsNumber(ch)|IsLetter(ch)tt關系運算符fseek(fpin,-1L,SEEK_CUR);cout-tt(line,row)endl;tt( 3,- )tt算術運算符elsett(line,row)endl;cout )
17、tt 關系運算elsecoutarr+chttErrorttEr符rortt(line,row)endtt(line,row)endl;l;break;fseek(fpin,-1L,SEEK_CUR);break;case* :cout-tt( 3,*)ttcase:ch=fgetc(fpin);算術運算符tt(line,row)endl;if(ch=)cout=tt( 4,=)case= :tt關系運算符ch=fgetc(fpin);t(line,row)endl;if(ch=)elsecout=tt( 4,=)couttt( 4,)算符tt關系運算符tt(line,row)endl;t(line,row)endl;elsefseek(fpin,-1L,SEEK_CUR);coutelsecouttt( 4, )tt 關系=tt( 4,=)tt 關系運算符運算符t(line,row)endl;t(line,row)endl;break;fseek(fpin,-1L,SEEK_CUR);break;case/ :coutchtt( 3,ch )default :tt 算術運算符coutchttErrorttErrorttt(line,row)endl;t(line,row)endl;break;break;case( :case) :ca
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 影視播放器硬件構成考核試卷
- 電子運動比賽現場設備考核試卷
- 窄軌機車車輛基礎知識考核試卷
- 清理呼吸道分泌物的護理技術
- 河北省邢臺市2023~2024學年高一數學下學期第三次月考試題含答案
- 江西環境工程職業學院《外科學實踐》2023-2024學年第一學期期末試卷
- 廈門安防科技職業學院《醫學實驗技術導論》2023-2024學年第二學期期末試卷
- 西藏藏醫藥大學《中小學舞蹈創編》2023-2024學年第二學期期末試卷
- 山東藝術學院《普通物理專題研究》2023-2024學年第二學期期末試卷
- 江蘇省連云港市贛榆區2024-2025學年小升初總復習數學精練含解析
- 建筑工程工程平移協議書范本
- 2024年度融資合同:科技公司與投資公司之間的融資協議
- 國家安全教育大學生第十章-爭做總體國家安全觀堅定踐行者
- 改性磷石膏施工方案
- 2024年教師資格考試初級中學面試音樂試題與參考答案
- 上海市幼兒園幼小銜接活動指導意見(修訂稿)
- 采購績效管理制度
- 卡西歐手表EFA-120中文使用說明書
- 加油站變更管理制度
- -小學英語人稱代詞與物主代詞講解課件(共58張課件).課件
- 醫學課件疼痛的護理
評論
0/150
提交評論