版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 編譯原理課程設計報告</p><p> 設計題目:詞法分析器</p><p><b> 學生姓名:</b></p><p> 學院:計算機科學與工程學院</p><p><b> 專業(yè):計算機科學</b></p><p><b> 班
2、級: </b></p><p><b> 學號: </b></p><p><b> 指導教師:</b></p><p> 時間:2014年1月2號</p><p><b> 目錄</b></p><p><b> 實驗目
3、的</b></p><p><b> 實驗要求</b></p><p><b> 算法設計的思想</b></p><p><b> 運行的環(huán)境</b></p><p><b> 算法設計流程圖</b></p><p&
4、gt;<b> 源代碼</b></p><p><b> 運行結果</b></p><p><b> 心得體會</b></p><p><b> 一 實驗目的</b></p><p> 設計一個簡單的詞法分析器,從而進一步加深對詞法分析過程的理解
5、。</p><p><b> 二 實驗要求</b></p><p> ?。?)該個詞法分析器要求至少能夠識別以下單詞: </p><p> 關鍵字:else if int return void while等,所有的關鍵字都是保留字,并且必須是小寫; </p>
6、<p> (2)分隔符 :" ","(",")","[","]","{","}",",",";","'" ;</p><p> 專用符號:+ - * / <
7、; <= > >= == != = ( ) [ ] { } /* */等。</p><p> (3) 輸入為待進行詞法分析的源程序,輸出為單詞串,即由(單詞,類別)所組成的二元組序列。
8、
9、 </p><p> ?。?)詞法分析器應當能夠指出源程序中的詞法錯誤,如不可識別的符號、錯誤的詞法等。</p><p><b&g
10、t; 三 算法設計的思想</b></p><p> (1)關鍵字表的初值</p><p> 關鍵字作為特殊標識符處理,把它們預先存儲在關鍵字數(shù)組中,當掃描序列識別出標識符時,與該數(shù)組作比較,如能匹配則為關鍵字,否則為一般標識符。</p><p> ?。?)程序中主要的變量與函數(shù)</p><p> char ch:存儲從bu
11、ffer中讀取的一個字符;</p><p> char buffer[MAX]:存儲讀取的文件;</p><p> char key[]:存儲關鍵字;</p><p> char arr[]:存儲當前掃描字符</p><p> int isKey(string s):判斷當前字符組是否為關鍵字;</p><p>
12、; int isLetter(char):判斷當前字符是否為字母;</p><p> int isDigit(char):判斷當前字符是否為數(shù)字;</p><p> void scanner(char buffer[]):掃描buffer數(shù)組 ;</p><p><b> 四 運行的環(huán)境</b></p><p>
13、 Windows 下的visual studio 2010。</p><p><b> 五 算法設計流程圖</b></p><p> 是 </p><p> 否 其他 </p><p> 字母
14、 數(shù)字 界符 運算符</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]; //存?儲洹?文?件t</p><p> char ch;
16、 //存?儲洹?讀á取?的?字?符?</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斷?關?鍵ü字?</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]; //暫存當前字符
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關鍵字)”)"<<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無T符號數(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運算符)”<<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運算符?)"<<
37、;endl;</p><p><b> else</b></p><p><b> {</b></p><p> cout<<"(:<<"\t界符?)?"<<endl;</p><p> j--; //回?退?一?個?字?符
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運算?符)"<<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運算符”<<endl;</p><p><b> else</b></p><p><b> {</b></p><p> cout<<"("<<"\t運算符<<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];//獲?取?下?一?個?字?符?</p><p> if(ch=='=')</p><p> cout<<"(="<<"\t運算符)"<<endl;
44、</p><p><b> else</b></p><p><b> {</b></p><p> cout<<"("<<"\t運算符)"<<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無法
46、識別字符)"<<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> 七 運行結果</b></p><p> ?。╬roceduer 關鍵字)</p><p> ?。╬ 普通標識符)</p><p><b> ?。ǎ?界符)</b></p><p> ?。╞egin 關鍵字)</p><p> ?。╥n
51、t 關鍵字)</p><p> ?。▁ 普通標識符)</p><p> (, 界符)</p><p> ?。▂ 普通標識符)</p><p> ?。? 界符)</p><p> (i 普通標識符)</p><p> ?。? 界符)</
52、p><p> ?。╥ 普通標識符)</p><p> (:= 運算符)</p><p> ?。? 無符號數(shù))</p><p> (; 界符)</p><p> ?。╳hile 關鍵字)</p><p> (( 界符)</p><p>
53、; (i 普通標識符)</p><p> ?。?gt;= 運算符)</p><p> (0 無符號數(shù))</p><p> ?。? 界符)</p><p> ?。▄ 界符)</p><p> ?。▁ 普通標識符)</p><p> (:=
54、運算符)</p><p> (y 普通標識符)</p><p> ?。? 運算符)</p><p> (2 無符號數(shù))</p><p> ?。? 運算符)</p><p> ?。? 無符號數(shù))</p><p> (/ 運算符)</p&g
55、t;<p> (3 無符號數(shù))</p><p> ?。? 界符)</p><p> ?。▆ 界符)</p><p> 請按任意鍵繼續(xù). . .</p><p><b> 八 心得體會</b></p><p> 經過一個星期的編譯原理課程設計,本人在老師
56、的指導下,順利完成該課程設計。通過該課程設計,收獲頗多。 </p><p> 一、對實驗原理有更深的理解 </p><p> 通過該課程設計,掌握了什么是編譯程序,編譯程序工作的基本過程及其各階段的基本任務,熟悉了編譯程序總流程框圖,了解了編譯程序的生成過程、構造工具及其相關的技術。</p><p> 二、對該理論在實踐中的應用
57、有深刻的理解 </p><p> 通過把該算法的內容,算法的執(zhí)行順序在計算機上實現(xiàn),知道和理解了該理論在計算機中是怎樣執(zhí)行的,對該理論在實踐中的應用有深刻的理解。 </p><p> 三、激發(fā)了學習的積極性 </p><p> 通過該課程設計,全面系統(tǒng)的理解了編譯原理程序構造的一般原理和基本實現(xiàn)
58、方法。把死板的課本知識變得生動有趣,激發(fā)了學習的積極性。把學過的計算機編譯原理的知識強化,能夠把課堂上學的知識通過自己設計的程序表示出來,加深了對理論知識的理解。以前對與計算機操 作系統(tǒng)的認識是模糊的,概念上的,對計算機編譯原理的認識更加深刻。課程設計中程序比較復雜,在調試時應該仔細,在程序調試時,注意指針,將不必要的命令去除。在這次課程設計中,我就是按照實驗指導的思想來完成。加深了理解文件系統(tǒng)的內部功能及內部實現(xiàn),培養(yǎng)實踐動
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 編譯原理課程設計報告詞法分析器
- 課程設計----編譯原理詞法分析器
- 編譯原理課程設計詞法分析器文檔
- 編譯原理詞法分析器語法分析課程設計
- 編譯原理課程設計-詞法語法分析器
- 編譯原理課程設計--pascal語言詞法、語法分析器設計
- 課程設計詞法分析器
- 編譯原理課程設計詞法分析
- 編譯原理課程設計--詞法分析
- 編譯原理課程設計--- 語法分析器
- 編譯原理課程設計---語法分析器
- 編譯原理課程設計--語法分析器
- 編譯原理語法分析器課程設計
- 編譯原理課程設計--- 詞法分析程序
- 編譯原理課程設計(c++)-語法分析器
- 編譯原理課程設計---ll(1)遞歸下降分析器
- 詞法分析器設計報告
- 編譯原理課程設計--表達式語法分析器
- 編譯原理課程設計-lr分析器總控程序的實現(xiàn)
- c-minus詞法分析和語法分析設計編譯器編譯原理課程設計
評論
0/150
提交評論