編譯原理課程設(shè)計(jì)報(bào)告之詞法分析器_第1頁(yè)
已閱讀1頁(yè),還剩11頁(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、<p>  編譯原理課程設(shè)計(jì)報(bào)告</p><p>  設(shè)計(jì)題目:詞法分析器</p><p><b>  學(xué)生姓名:</b></p><p>  學(xué)院:計(jì)算機(jī)科學(xué)與工程學(xué)院</p><p><b>  專業(yè):計(jì)算機(jī)科學(xué)</b></p><p><b>  班

2、級(jí): </b></p><p><b>  學(xué)號(hào): </b></p><p><b>  指導(dǎo)教師:</b></p><p>  時(shí)間:2014年1月2號(hào)</p><p><b>  目錄</b></p><p><b>  實(shí)驗(yàn)?zāi)?/p>

3、的</b></p><p><b>  實(shí)驗(yàn)要求</b></p><p><b>  算法設(shè)計(jì)的思想</b></p><p><b>  運(yùn)行的環(huán)境</b></p><p><b>  算法設(shè)計(jì)流程圖</b></p><p&

4、gt;<b>  源代碼</b></p><p><b>  運(yùn)行結(jié)果</b></p><p><b>  心得體會(huì)</b></p><p><b>  一 實(shí)驗(yàn)?zāi)康?lt;/b></p><p>  設(shè)計(jì)一個(gè)簡(jiǎn)單的詞法分析器,從而進(jìn)一步加深對(duì)詞法分析過(guò)程的理解

5、。</p><p><b>  二 實(shí)驗(yàn)要求</b></p><p>  (1)該個(gè)詞法分析器要求至少能夠識(shí)別以下單詞: </p><p>  關(guān)鍵字:else if int return void while等,所有的關(guān)鍵字都是保留字,并且必須是小寫(xiě); </p>

6、<p>  (2)分隔符 :" ","(",")","[","]","{","}",",",";","'" ;</p><p>  專用符號(hào):+ - * / <

7、; <= > >= == != = ( ) [ ] { } /* */等。</p><p>  (3) 輸入為待進(jìn)行詞法分析的源程序,輸出為單詞串,即由(單詞,類別)所組成的二元組序列。

8、

9、 </p><p> ?。?)詞法分析器應(yīng)當(dāng)能夠指出源程序中的詞法錯(cuò)誤,如不可識(shí)別的符號(hào)、錯(cuò)誤的詞法等。</p><p><b&g

10、t;  三 算法設(shè)計(jì)的思想</b></p><p> ?。?)關(guān)鍵字表的初值</p><p>  關(guān)鍵字作為特殊標(biāo)識(shí)符處理,把它們預(yù)先存儲(chǔ)在關(guān)鍵字?jǐn)?shù)組中,當(dāng)掃描序列識(shí)別出標(biāo)識(shí)符時(shí),與該數(shù)組作比較,如能匹配則為關(guān)鍵字,否則為一般標(biāo)識(shí)符。</p><p>  (2)程序中主要的變量與函數(shù)</p><p>  char ch:存儲(chǔ)從bu

11、ffer中讀取的一個(gè)字符;</p><p>  char buffer[MAX]:存儲(chǔ)讀取的文件;</p><p>  char key[]:存儲(chǔ)關(guān)鍵字;</p><p>  char arr[]:存儲(chǔ)當(dāng)前掃描字符</p><p>  int isKey(string s):判斷當(dāng)前字符組是否為關(guān)鍵字;</p><p>

12、;  int isLetter(char):判斷當(dāng)前字符是否為字母;</p><p>  int isDigit(char):判斷當(dāng)前字符是否為數(shù)字;</p><p>  void scanner(char buffer[]):掃描buffer數(shù)組 ;</p><p><b>  四 運(yùn)行的環(huán)境</b></p><p>

13、  Windows 下的visual studio 2010。</p><p><b>  五 算法設(shè)計(jì)流程圖</b></p><p>  是 </p><p>  否 其他 </p><p>  字母

14、 數(shù)字 界符 運(yùn)算符</p><p><b>  六 源代碼</b></p><p>  #include<iostream></p><p>  #include<stdio.h></p><p>  #include <fstream></p>

15、;<p>  #include<string.h></p><p>  using namespace std;</p><p>  const int MAX =1000;</p><p>  char buffer[MAX]; //存?儲(chǔ)洹?文?件t</p><p>  char ch;

16、 //存?儲(chǔ)洹?讀á取?的?字?符?</p><p>  string key[16]={"begin","end","var","proceduer","read","write","if","then",</p><p&g

17、t;  "else","while","do","int","until","return","protected","var"};</p><p>  int isKey(string s){</p><p><b> 

18、 int i;</b></p><p>  for(i=0;i<21;i++)</p><p>  if(key[i].compare(s)==0)</p><p><b>  return 1;</b></p><p><b>  return 0;</b></p>

19、<p>  } //判D斷?關(guān)?鍵ü字?</p><p>  int isLetter(char c){</p><p>  if((c<'Z'&&c>'A')||(c> 'a'&& c<'z&

20、#39;))</p><p><b>  return 1;</b></p><p><b>  else </b></p><p><b>  return 0;</b></p><p>  } //判D斷?字

21、?母?</p><p>  int isDigit(char c){</p><p>  if((c>='0'&&c<='9'))</p><p><b>  return 1;</b></p><p><b>  else </b><

22、;/p><p><b>  return 0;</b></p><p>  } //判D斷?數(shù)簓字?</p><p>  void scanner(char buffer[]){</p><p>  char arr[30]; //暫存當(dāng)前字符

23、</p><p>  int p=0,j; //</p><p>  for(j=0;(ch=buffer[j])!='\0';j++){</p><p><b>  int i;</b></p><p><b>  p=0;</b></p>

24、<p>  for(i=0;i<30;i++)</p><p>  arr[i]=NULL; </p><p>  if(ch==' '||ch=='\t'||ch=='\n'){}</p><p>  else if(isLetter(ch)){</p>&

25、lt;p>  p=0; </p><p>  while(isLetter(ch)||isDigit(ch)){</p><p>  if(ch<='Z'&&ch>='A')</p><p>  ch=ch+32; </

26、p><p>  arr[p++]=ch; </p><p>  ch=buffer[++j];}</p><p>  arr[p]='\0'; </p><p>  j--; </p><p>  

27、if(isKey(arr))</p><p>  cout<<"(“<<arr<<"\t關(guān)鍵字)”)"<<endl;</p><p><b>  else</b></p><p>  cout<<"(“<<arr<<&qu

28、ot;\t普通字符)"<<endl;</p><p><b>  else </b></p><p>  if(isDigit(ch)){</p><p>  p=0;

29、 while((isDigit(ch))||(ch=='.'&&isDigit(buffer[j]))){</p><p>  arr[p++]=ch;</p><p>  ch=buffer[++j];</p><p><b>  }</b></p><p>&l

30、t;b>  j--;</b></p><p>  arr[p]='\0';</p><p>  cout<<"(”<<arr<<"\t無(wú)T符號(hào)數(shù)“)"<<endl;</p><p><b>  }</b></p><

31、;p><b>  else</b></p><p><b>  { </b></p><p>  switch(ch)</p><p><b>  {</b></p><p><b>  case '+':</b></p>

32、<p><b>  case '-':</b></p><p><b>  case'*':</b></p><p><b>  case'=':</b></p><p>  case'/':cout<<(<

33、;<ch<<"\t運(yùn)算符)”<<endl;break;</p><p><b>  case'(':</b></p><p><b>  case ')':</b></p><p><b>  case '[':</b&

34、gt;</p><p><b>  case ']':</b></p><p><b>  case ';':</b></p><p><b>  case '.':</b></p><p><b>  case'

35、;,':</b></p><p><b>  case'{':</b></p><p>  case '}':cout<<(<ch<<"\t界?符)“<<endl;break;</p><p><b>  case ':&#

36、39;:</b></p><p><b>  {</b></p><p>  ch=buffer[++j];</p><p>  if(ch=='=')</p><p>  cout<<"(="<<"\t運(yùn)算符?)"<<

37、;endl;</p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"(:<<"\t界符?)?"<<endl;</p><p>  j--; //回?退?一?個(gè)?字?符

38、?</p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case'<':</b></p><p><

39、;b>  {</b></p><p>  ch=buffer[++j];</p><p>  if(ch=='=')</p><p>  cout<<"(="<<"\t運(yùn)算?符)"<<endl;</p><p>  else i

40、f(ch=='<')</p><p>  cout<<"(<<"\t控制符?)?"<<endl;</p><p>  else if(ch=='>') </p><p>  cout<<"(?>"<<&quo

41、t;\t運(yùn)算符”<<endl;</p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"("<<"\t運(yùn)算符<<endl;</p><p><b>

42、  j--; </b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  case '>':</b></p&

43、gt;<p><b>  {</b></p><p>  ch=buffer[++j];//獲?取?下?一?個(gè)?字?符?</p><p>  if(ch=='=')</p><p>  cout<<"(="<<"\t運(yùn)算符)"<<endl;

44、</p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"("<<"\t運(yùn)算符)"<<endl;</p><p><b>  j--; <

45、;/b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  default: cout<<"(<<ch<<"\t無(wú)法

46、識(shí)別字符)"<<endl;</p><p>  }//switch</p><p><b>  }//else</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  int

47、 main()</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  char s[30];</p><p>  cout<<"輸出文件名 "<<endl;</p><p>&

48、lt;b>  cin>>s;</b></p><p>  char prog[MAX]="";</p><p>  ofstream outFile;</p><p>  ifstream infile;</p><p>  infile.open(s,ios::in);</p>

49、<p>  //outFile.open(s,ios::in);</p><p>  infile.read(prog,999);</p><p>  cout<<prog;</p><p>  scanner(prog);</p><p><b>  }</b></p><p

50、><b>  七 運(yùn)行結(jié)果</b></p><p> ?。╬roceduer 關(guān)鍵字)</p><p>  (p 普通標(biāo)識(shí)符)</p><p><b> ?。ǎ?界符)</b></p><p> ?。╞egin 關(guān)鍵字)</p><p> ?。╥n

51、t 關(guān)鍵字)</p><p> ?。▁ 普通標(biāo)識(shí)符)</p><p> ?。? 界符)</p><p>  (y 普通標(biāo)識(shí)符)</p><p> ?。? 界符)</p><p> ?。╥ 普通標(biāo)識(shí)符)</p><p>  (; 界符)</

52、p><p> ?。╥ 普通標(biāo)識(shí)符)</p><p> ?。?= 運(yùn)算符)</p><p> ?。? 無(wú)符號(hào)數(shù))</p><p>  (; 界符)</p><p> ?。╳hile 關(guān)鍵字)</p><p>  (( 界符)</p><p>

53、;  (i 普通標(biāo)識(shí)符)</p><p> ?。?gt;= 運(yùn)算符)</p><p> ?。? 無(wú)符號(hào)數(shù))</p><p> ?。? 界符)</p><p> ?。▄ 界符)</p><p> ?。▁ 普通標(biāo)識(shí)符)</p><p> ?。?=

54、運(yùn)算符)</p><p>  (y 普通標(biāo)識(shí)符)</p><p> ?。? 運(yùn)算符)</p><p>  (2 無(wú)符號(hào)數(shù))</p><p> ?。? 運(yùn)算符)</p><p>  (1 無(wú)符號(hào)數(shù))</p><p> ?。? 運(yùn)算符)</p&g

55、t;<p> ?。? 無(wú)符號(hào)數(shù))</p><p> ?。? 界符)</p><p> ?。▆ 界符)</p><p>  請(qǐng)按任意鍵繼續(xù). . .</p><p><b>  八 心得體會(huì)</b></p><p>  經(jīng)過(guò)一個(gè)星期的編譯原理課程設(shè)計(jì),本人在老師

56、的指導(dǎo)下,順利完成該課程設(shè)計(jì)。通過(guò)該課程設(shè)計(jì),收獲頗多。 </p><p>  一、對(duì)實(shí)驗(yàn)原理有更深的理解  </p><p>  通過(guò)該課程設(shè)計(jì),掌握了什么是編譯程序,編譯程序工作的基本過(guò)程及其各階段的基本任務(wù),熟悉了編譯程序總流程框圖,了解了編譯程序的生成過(guò)程、構(gòu)造工具及其相關(guān)的技術(shù)。</p><p>  二、對(duì)該理論在實(shí)踐中的應(yīng)用

57、有深刻的理解  </p><p>  通過(guò)把該算法的內(nèi)容,算法的執(zhí)行順序在計(jì)算機(jī)上實(shí)現(xiàn),知道和理解了該理論在計(jì)算機(jī)中是怎樣執(zhí)行的,對(duì)該理論在實(shí)踐中的應(yīng)用有深刻的理解。  </p><p>  三、激發(fā)了學(xué)習(xí)的積極性  </p><p>  通過(guò)該課程設(shè)計(jì),全面系統(tǒng)的理解了編譯原理程序構(gòu)造的一般原理和基本實(shí)現(xiàn)

58、方法。把死板的課本知識(shí)變得生動(dòng)有趣,激發(fā)了學(xué)習(xí)的積極性。把學(xué)過(guò)的計(jì)算機(jī)編譯原理的知識(shí)強(qiáng)化,能夠把課堂上學(xué)的知識(shí)通過(guò)自己設(shè)計(jì)的程序表示出來(lái),加深了對(duì)理論知識(shí)的理解。以前對(duì)與計(jì)算機(jī)操 作系統(tǒng)的認(rèn)識(shí)是模糊的,概念上的,對(duì)計(jì)算機(jī)編譯原理的認(rèn)識(shí)更加深刻。課程設(shè)計(jì)中程序比較復(fù)雜,在調(diào)試時(shí)應(yīng)該仔細(xì),在程序調(diào)試時(shí),注意指針,將不必要的命令去除。在這次課程設(shè)計(jì)中,我就是按照實(shí)驗(yàn)指導(dǎo)的思想來(lái)完成。加深了理解文件系統(tǒng)的內(nèi)部功能及內(nèi)部實(shí)現(xiàn),培養(yǎng)實(shí)踐動(dòng)

溫馨提示

  • 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ù)僅提供信息存儲(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)論