編譯原理完整_第1頁
編譯原理完整_第2頁
編譯原理完整_第3頁
編譯原理完整_第4頁
編譯原理完整_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 天津大學(xué)仁愛學(xué)院編譯原理實驗報告計算機科學(xué)與技術(shù)系 學(xué)生姓名:王玲玲 指導(dǎo)教師:孫林娟 班 級:計科四班 實驗日期:2015 年 12月22 日 實驗名稱:詞法分析器的實現(xiàn)過程 一、實驗名稱模擬詞法分析器的轉(zhuǎn)化過程二、實驗?zāi)康?、學(xué)習(xí)各個詞法分析器的裝換過程2、掌握狀態(tài)轉(zhuǎn)換圖的畫法3、合并各個狀態(tài)轉(zhuǎn)換圖,使之合并成完整的狀態(tài)轉(zhuǎn)換圖。4、根據(jù)狀態(tài)裝換圖,用代碼實現(xiàn)詞法分析器的編譯過程設(shè)計、編制、調(diào)制一個詞法分析子程序-識別單詞,加深對詞法分析原理的理解。三、實驗工具VC+6.0四、實驗描述對不同的關(guān)鍵字,表示符,無符號整常數(shù),運算符或分解符進行區(qū)分。1、用狀態(tài)裝畫圖,表示每一項固定符號2、合并

2、所有的狀態(tài)轉(zhuǎn)換,完成完整的狀態(tài)裝換圖3、通過狀態(tài)轉(zhuǎn)換圖,寫出相應(yīng)的代碼4、測試代碼正確性程序?qū)崿F(xiàn)的是一個讀單詞過程,從輸入的源程序中,識別出各個具有獨立意義的單詞,即基本保留字,標(biāo)識符,常數(shù),運算符,分隔符五大類,并依次輸出各個單詞的內(nèi)部編碼及單詞符號自身值。五、設(shè)計思想設(shè)計詞法分析器的過程中,雖然沒有實際將所有的狀態(tài)轉(zhuǎn)換圖建立,但是所用的思想是根據(jù)狀態(tài)轉(zhuǎn)換表實現(xiàn)對單詞的識別,首先構(gòu)造一個保留字表,然后,沒輸入一個字符就檢測應(yīng)該進入什么狀態(tài)。根據(jù)不同的裝換識別單詞。六、實驗過程實驗1:1、C語言子集(1)關(guān)鍵字:begin if then while do end所有關(guān)鍵字都是小寫。(2)運算

3、符和界符::= + * / < <= <> > >= = ; ( ) # (3)其他單詞是標(biāo)識符(ID)和整型常數(shù)(NUM),通過以下正規(guī)式定義:ID=letter(letter| digit)*NUM=digit digit * (4)空格由空白、制表符和換行符組成??崭褚话阌脕矸指鬒D、NUM,運算符、界符和關(guān)鍵字,詞法分析階段通常被忽略。2、各種單詞符號對應(yīng)的種別碼單詞符號種別碼單詞符號種別碼begin1:17if2:=18then3>20while4<>21do5<=22end6<23letter(letter| dig

4、it)*10>=24digit digit *11=25*13;26/14(27+15)28-16#0單詞符號種別碼單詞符號種別碼begin1:17if2:=18then3>20while4<>21do5<=22end6<23letter(letter| digit)*10>=24digit digit *11=25*13;26/14(27+15)28-16#03、詞法分析程序的功能輸入:所給文法的源程序字符串。輸出:二元組(syn,token或sum)構(gòu)成的序列。其中:syn為單詞種別碼; token為存放的單詞自身字符串; sum為整型常數(shù)。4、狀

5、態(tài)裝換圖5、實驗方法、步驟(或:程序代碼或操作過程)(1)程序代碼#include<stdio.h>#include<string.h>#include<iostream.h>char prog80,token8;char ch;int syn,p,m=0,n,row,sum=0;char *rwtab6="begin","if","then","while","do","end"void scaner()for(n=0;n<8;n+

6、) tokenn=NULL;ch=progp+;while(ch=' ')ch=progp;p+;if(ch>='a'&&ch<='z')|(ch>='A'&&ch<='Z')m=0;while(ch>='0'&&ch<='9')|(ch>='a'&&ch<='z')|(ch>='A'&&ch<=&

7、#39;Z')tokenm+=ch;ch=progp+;tokenm+='0'p-;syn=10;for(n=0;n<6;n+)if(strcmp(token,rwtabn)=0)syn=n+1;break;else if(ch>='0'&&ch<='9')sum=0;while(ch>='0'&&ch<='9')sum=sum*10+ch-'0'ch=progp+;p-;syn=11;if(sum>32767)syn=-1

8、;else switch(ch)case'<':m=0;tokenm+=ch;ch=progp+;if(ch='>')syn=21;tokenm+=ch;else if(ch='=')syn=22;tokenm+=ch;elsesyn=23;p-;break;case'>':m=0;tokenm+=ch;ch=progp+;if(ch='=')syn=24;tokenm+=ch;elsesyn=20;p-;break;case':':m=0;tokenm+=ch;ch=progp+

9、;if(ch='=')syn=18;tokenm+=ch;elsesyn=17;p-;break;case'*':syn=13;token0=ch;break;case'/':syn=14;token0=ch;break;case'+':syn=15;token0=ch;break;case'-':syn=16;token0=ch;break;case'=':syn=25;token0=ch;break;case'':syn=26;token0=ch;break;case'(

10、':syn=27;token0=ch;break;case')':syn=28;token0=ch;break;case'#':syn=0;token0=ch;break;case'n':syn=-2;break;default: syn=-1;break;void main()p=0;row=1;cout<<"Please input string:"<<endl;docin.get(ch);progp+=ch;while(ch!='#');p=0;doscaner();swi

11、tch(syn)case 11: cout<<"("<<syn<<","<<sum<<")"<<endl; break; case -1: cout<<"Error in row "<<row<<"!"<<endl; break;case -2: row=row+;break; default: cout<<"("<<syn<&

12、lt;","<<token<<")"<<endl;break;while (syn!=0);(2)創(chuàng)建編輯程序(3) 連接、編譯和調(diào)試程序(4)運行程序(5)測試給定源程序begin x:=8; if x>0 then x:=2*x+1/5; end#輸出結(jié)果實驗2:1、C語言子集(1)關(guān)鍵字:Int for if所有關(guān)鍵字都是小寫。(2)運算符和界符:+ = += + * # (3)其他單詞是標(biāo)識符(ID)和整型常數(shù)(NUM),通過以下正規(guī)式定義:ID=letter(letter| digit)*NUM=dig

13、it digit * (4)空格由空白、制表符和換行符組成??崭褚话阌脕矸指鬒D、NUM,運算符、界符和關(guān)鍵字,詞法分析階段通常被忽略。2、各種單詞符號對應(yīng)的種別碼單詞符號種別碼單詞符號種別碼 Int 1 * 9 if 2 = 10 For 3 11 + 6 12 + 7 # 13 += 8 letter(letter| digit)*4 digit digit * 53、詞法分析程序的功能輸入:所給文法的源程序字符串。輸出:二元組(syn,token或sum)構(gòu)成的序列。其中:syn為單詞種別碼;token為存放的單詞自身字符串;sum為整型常數(shù)。4、狀態(tài)裝換圖5、實驗方法、步驟(或:程序代

14、碼或操作過程)(1)程序代碼#include<stdio.h>#include<string.h>#include<iostream.h>char prog80,token8;/token給8個存儲空間char ch;/一個單詞int syn,p,m=0,n,row,sum=0;/syn:單詞類別,token:對相應(yīng) row:行數(shù), sum:存放常數(shù)char *rwtab10="int","if","for"/定義關(guān)鍵字 void scaner()for(n=0;n<8;n+) tokenn=

15、NULL;ch=progp+;/將一個單詞給了chwhile(ch=' ')ch=progp;/ch為空格的話,p+;if(ch>='a'&&ch<='z')|(ch>='A'&&ch<='Z')m=0;while(ch>='0'&&ch<='9')|(ch>='a'&&ch<='z')|(ch>='A'&&am

16、p;ch<='Z')tokenm+=ch;ch=progp+;tokenm+='0'p-;syn=5;for(n=0;n<3;n+)if(strcmp(token,rwtabn)=0)syn=n+1;break;else if(ch>='0'&&ch<='9')sum=0;while(ch>='0'&&ch<='9')sum=sum*10+ch-'0'ch=progp+;p-;syn=4;if(sum>3276

17、7)syn=-1;else switch(ch)case'+':m=0;tokenm+=ch;ch=progp+;if(ch='+')syn=7;tokenm+=ch;else if(ch='=')syn=8;tokenm+=ch;elsesyn=6;break;case'*':syn=9;token0=ch;break;case'=':syn=10;token0=ch;break;case'':syn=11;token0=ch;break;case'':syn=12;token0=

18、ch;break;case'#':syn=0;token0=ch;break;case'n':syn=-2;break;default: syn=-1;break;void main()p=0;row=1;cout<<"Please input string:"<<endl;docin.get(ch);progp+=ch;while(ch!='#');p=0;doscaner();switch(syn)case 3: cout<<"("<<syn<<

19、;","<<sum<<")"<<endl; break; case -1: cout<<"Error in row "<<row<<"!"<<endl; break;case -2: row=row+;break; default: cout<<"("<<syn<<","<<token<<")"<<en

20、dl;break;while (syn!=0);(2)創(chuàng)建編輯程序(3)連接、編譯和調(diào)試程序(4)運行程序(5)測試For 444 xxx +=y x* y=z輸出結(jié)果實驗2:1、C語言子集(1)關(guān)鍵字: Void char int float double short long signed unsigned struct 所有關(guān)鍵字都是小寫。(2)運算符和界符:+ + += - - -= / /= * *= % %= = = > < >= >> <= << & && | | ! != ( ) ; , # (3)其他單詞

21、是標(biāo)識符(ID)和整型常數(shù)(NUM),通過以下正規(guī)式定義:ID=letter(letter| digit)*NUM=digit digit * (4)空格由空白、制表符和換行符組成??崭褚话阌脕矸指鬒D、NUM,運算符、界符和關(guān)鍵字,詞法分析階段通常被忽略。2、各種單詞符號對應(yīng)的種別碼單詞符號種別碼單詞符號種別碼 Void 1 = 25 Char 2 > 26 int 3 < 27 float 4 >= 28 double 5 >> 29Short 6 < 30Long 7 <= 31Signed 8 << 32Unsigned 9 &am

22、p; 33Struct 10 && 34+ 13 | 35+ 14 | 36+= 15 ! 37- 16 != 38 - 17 ( 39-= 18 ) 40/ 19 41/= 20 42* 21 43*= 22 44%= 23 ; 45= 24 # 46 letter(letter| digit)*11 digit digit * 53、詞法分析程序的功能輸入:所給文法的源程序字符串。輸出:二元組(syn,token或sum)構(gòu)成的序列。其中:syn為單詞種別碼;token為存放的單詞自身字符串;sum為整型常數(shù)。4、 狀態(tài)裝換圖5、實驗方法、步驟(或:程序代碼或操作過程)(1

23、)程序代碼#include<stdio.h>#include<string.h>#include<iostream.h>char prog80,token8;char ch;int syn,p,m=0,n,row,sum=0;char *rwtab10="void","char","int","float","double","short","long","signed","unsigned

24、","struct" void scaner()for(n=0;n<8;n+) tokenn=NULL;ch=progp+;while(ch=' ')ch=progp;p+;if(ch>='a'&&ch<='z')|(ch>='A'&&ch<='Z')m=0;while(ch>='0'&&ch<='9')|(ch>='a'&&c

25、h<='z')|(ch>='A'&&ch<='Z')|(ch='_')tokenm+=ch;ch=progp+;tokenm+='0'p-;syn=12;for(n=0;n<10;n+)if(strcmp(token,rwtabn)=0)syn=n+1;break;else if(ch>='0'&&ch<='9')sum=0;while(ch>='0'&&ch<='

26、9')sum=sum*10+ch-'0'ch=progp+;p-;syn=11;if(sum>32767)syn=-1;else switch(ch)case'+':m=0;tokenm+=ch;ch=progp+;if(ch='+')syn=14;tokenm+=ch;else if(ch='=')syn=15;tokenm+=ch;elsesyn=13;p-;break;case'-':m=0;tokenm+=ch;ch=progp+;if(ch='-')syn=17;tokenm

27、+=ch;else if(ch='=')syn=18;tokenm+=ch;elsesyn=16;p-;break;case'/':m=0;tokenm+=ch;ch=progp+;if(ch='=')syn=20;tokenm+=ch;elsesyn=19;p-;break;case'*':m=0;tokenm+=ch;ch=progp+;if(ch='=')syn=22;tokenm+=ch;elsesyn=21;p-;break;case'%':m=0;tokenm+=ch;ch=progp+

28、;if(ch='=')syn=24;tokenm+=ch;elsesyn=23;p-;break;case'=':m=0;tokenm+=ch;ch=progp+;if(ch='=')syn=26;tokenm+=ch;elsesyn=25;p-;break;case'>':m=0;tokenm+=ch;ch=progp+;if(ch='=')syn=28;tokenm+=ch;else if(ch='>')syn=29;tokenm+=ch;elsesyn=27;p-;break;ca

29、se'<':m=0;tokenm+=ch;ch=progp+;if(ch='=')syn=31;tokenm+=ch;else if(ch='<')syn=32;tokenm+=ch;elsesyn=30;p-;break;case'&':m=0;tokenm+=ch;ch=progp+;if(ch='&')syn=34;tokenm+=ch;elsesyn=33;p-;break;case'|':m=0;tokenm+=ch;ch=progp+;if(ch='|')syn=36;tokenm+=ch;elsesyn=35;p-;break;case'!':m=0;tokenm+=ch;ch=progp+;if(ch='=')syn=38;tokenm+=ch;elsesyn=37;p-;break;case'(':syn=39;token0=ch;break;case')':syn=40;token0=ch;break;case'':syn=41;t

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論