編譯原理詞法分析實(shí)驗(yàn)報(bào)告_第1頁(yè)
編譯原理詞法分析實(shí)驗(yàn)報(bào)告_第2頁(yè)
編譯原理詞法分析實(shí)驗(yàn)報(bào)告_第3頁(yè)
編譯原理詞法分析實(shí)驗(yàn)報(bào)告_第4頁(yè)
編譯原理詞法分析實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上院(系) 計(jì)算機(jī)學(xué)院 專業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 班級(jí) 姓名 學(xué)號(hào) 同組人 無(wú) 實(shí)驗(yàn)室 S4305 組號(hào) 日期 課程 編譯原理 指導(dǎo)教師 成績(jī) 實(shí)驗(yàn)項(xiàng)目編號(hào) 實(shí)驗(yàn)項(xiàng)目名 詞法分析 1、 實(shí)驗(yàn)?zāi)康?、 通過(guò)設(shè)計(jì)、開(kāi)發(fā)一個(gè)高級(jí)語(yǔ)言的詞法分析程序,加深對(duì)課堂教學(xué)內(nèi)容(包括正規(guī)文法、正規(guī)表達(dá)式、有限自動(dòng)機(jī)、NFA到DFA的轉(zhuǎn)換、DFA的最小化)的理解,提高詞法分析方法的實(shí)踐能力。2、編譯原理涉及詞法分析,語(yǔ)法分析,語(yǔ)義分析及優(yōu)化設(shè)計(jì)等各方面。詞法分析階段是編譯過(guò)程的第一個(gè)階段,是編譯的基礎(chǔ)。這個(gè)階段的任務(wù)是從左到右一個(gè)字符一個(gè)字符地讀入源程序,即對(duì)構(gòu)成源程序的字符流進(jìn)行掃描然后根

2、據(jù)構(gòu)詞規(guī)則識(shí)別單詞(也稱單詞符號(hào)或符號(hào))。詞法分析程序?qū)崿F(xiàn)這個(gè)任務(wù)。從左到右逐個(gè)字符對(duì)構(gòu)成源程序的字符串進(jìn)行掃描,依據(jù)詞法規(guī)則,識(shí)別出一個(gè)一個(gè)的標(biāo)記(token),把源程序變?yōu)榈葍r(jià)的標(biāo)記串序列。執(zhí)行詞法分析的程序稱為詞法分析器,也稱為掃描器。2、 實(shí)驗(yàn)環(huán)境(儀器設(shè)備、軟件等) 電腦一臺(tái) VC 三、實(shí)驗(yàn)原理(或要求)1、深入理解、掌握有限自動(dòng)機(jī)及其應(yīng)用;2、掌握根據(jù)語(yǔ)言的詞法規(guī)則構(gòu)造識(shí)別其單詞的有限自動(dòng)機(jī)的方法;3、掌握NFA到DFA的等價(jià)變換方法、DFA最小化的方法;4、掌握設(shè)計(jì)、編碼、調(diào)試詞法分析程序的技術(shù)與方法,具體實(shí)現(xiàn)S語(yǔ)言的詞法分析程序。四、實(shí)驗(yàn)步驟待分析的簡(jiǎn)單的詞法(1)關(guān)鍵字:&#

3、160;  begin  if  then  while  do  end  所有的關(guān)鍵字都是小寫。(2)運(yùn)算符和界符:  : =  +  -  *  /  <  <=  <>  >  >=  =

4、0;   (  )  #(3)其他單詞是標(biāo)識(shí)符(ID)和整型常數(shù)(SUM),通過(guò)以下正規(guī)式定義:ID = letter (letter | digit)*NUM = digit digit*(4)空格有空白、制表符和換行符組成??崭褚话阌脕?lái)分隔ID、SUM、運(yùn)算符、界符和關(guān)鍵字,詞法分析階段通常被忽略。 2.2 各種單詞符號(hào)對(duì)應(yīng)的種別碼表2.1 各種單詞符號(hào)對(duì)應(yīng)的種別碼單詞符號(hào)種別碼單詞符號(hào)種別碼begin1:17if2: =18then3< 20while4<>&#

5、160;21do5<=22end6> 23letter (letter | digit)*10>=24digit digit*11=25+13;26-14(27*15)28/16#0詞法分析程序的C語(yǔ)言程序源代碼#include <stdio.h>#include <stdlib.h>#include <string.h>char prog100,ch,token8;int p=0,syn,n,i;char *keyword6="begin","then","if",&q

6、uot;while","do","end"void scaner();void Irparse();void statement();void expression_r();void term();void factor();  void main()       int select=-1;       p=0;      &

7、#160;printf("please input sentence, end of '#' !n");       do                     ch=getchar();        

8、;      progp+=ch;       while(ch!='#');       p=0;             printf("請(qǐng)輸入1 或 2 n  1.詞法分析n  

9、2.語(yǔ)法分析n");              scanf("%d",&select);       if(select=1)                   

10、;      do                            scaner();              

11、switch(syn)                                                &

12、#160;      case -1:printf("詞法分析 出錯(cuò)n");break;                     default :printf("<%d,%s>n",syn,token);break;    &

13、#160;                                  while(syn!=0);             

14、; printf("詞法分析 成功n");              else if(select=2)                        scaner(); 

15、;      if(syn=1)              Irparse();/begin       else              printf("語(yǔ)法分析出錯(cuò)!

16、0;請(qǐng)檢查begin關(guān)鍵字n");return;    if(syn=6)/end                                   scaner();  

17、60;                  if(syn=0)                              

18、                   printf("恭喜 語(yǔ)法分析 成功n");                        

19、                  else                     printf("語(yǔ)法分析出錯(cuò)! 請(qǐng)檢查是否缺少'#'n"); 

20、60;                   elseprintf("語(yǔ)法分析出錯(cuò)! 請(qǐng)檢查是否缺少'end'n");                    

21、0;     getchar(); void scaner()                          for(n=0;n<8;n+)       tokenn='0' 

22、;      n=0;      ch=progp+;              while(ch=' ')ch=progp+;                &#

23、160;          if(ch>='a'&&ch<='z')|(ch>='A'&&ch<='Z')                       

24、;            do                            tokenn+=ch;       

25、0;                    ch=progp+;                    while(ch>='a'&&ch<='z&

26、#39;)|(ch>='a'&&ch<='z')|(ch>='0'&&ch<='9');                     syn=10;          

27、60;                              for(n=0;n<6;n+)                

28、60;    if(strcmp(token,keywordn)=0)                                         

29、;        syn=n+1;                                        

30、60;                                                 p-;

31、                     /return;                           

32、0;else if(ch>='0'&&ch<='9')                                   p-;     

33、                do                                 

34、0;               tokenn+=progp+;                            ch=progp;  

35、0;                  while(ch>='0'&&ch<='9');                     syn=11;

36、60;                                                 

37、60;          return;                            else         

38、0;                                             /ch=progp+;   

39、;                  switch(ch)                              &

40、#160;           case '+':syn=13;token0=ch;break;                     case '-':syn=14;token0=ch;break;    

41、;                 case '*':syn=15;token0=ch;break;                     case '/':syn=16;token0=

42、ch;break;                     case ':':syn=17;token0=ch;                      

43、;             ch=progp+;                                   i

44、f(ch='=')token1=ch;syn+;                                   else p-;        &#

45、160;                          break;                     case 

46、9;<':syn=20;token0=ch;                                   ch=progp+;        

47、60;                       if(ch='>')token1=ch;syn+;                    

48、60;              else if(ch='=')token1=ch;syn=syn+2;                            &#

49、160;      else p-;                                   break;      

50、               case '>':syn=23;token0=ch;                             

51、;   ch=progp+;                                   if(ch='=')token1=ch;syn+;    

52、0;                              else p-;                  &#

53、160;                break;                     case '=':syn=25;token0=ch;break;    

54、0;                case '':syn=26;token0=ch;break;                     case '(':syn=27;token0=ch;bre

55、ak;                     case ')':syn=28;token0=ch;break;                     case

56、'#':syn=0;token0=ch;break;                                         default: printf(&quo

57、t;詞法分析出錯(cuò)! 請(qǐng)檢查是否輸入非法字符n");syn=-1;break;                                          

58、                     /return;                           

59、0; void Irparse()       scaner();       statement();       while(syn=26)/;                   &#

60、160;               scaner();                     statement();          

61、;          void statement()       if(syn=10)                     scaner();      

62、        if(syn=18)                                   scaner();    

63、;                 expression_r();                            else 

64、0;                                 printf("語(yǔ)法分析出錯(cuò)! 請(qǐng)檢查表達(dá)式是否正確n");return;        

65、                    else                     printf("語(yǔ)法分析出錯(cuò)!  請(qǐng)檢查語(yǔ)句是否正確n");

66、return;        void expression_r()       term();       while(syn=13|syn=14)/+ -                     scaner();              term();        void term()       factor();       while(s

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論