版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 編譯原理課程設(shè)計(jì)報(bào)告詞法分析器
- 課程設(shè)計(jì)----編譯原理詞法分析器
- 編譯原理課程設(shè)計(jì)詞法分析器文檔
- 編譯原理詞法分析器語(yǔ)法分析課程設(shè)計(jì)
- 編譯原理課程設(shè)計(jì)-詞法語(yǔ)法分析器
- 編譯原理課程設(shè)計(jì)--pascal語(yǔ)言詞法、語(yǔ)法分析器設(shè)計(jì)
- 課程設(shè)計(jì)詞法分析器
- 編譯原理課程設(shè)計(jì)詞法分析
- 編譯原理課程設(shè)計(jì)--詞法分析
- 編譯原理課程設(shè)計(jì)--- 語(yǔ)法分析器
- 編譯原理課程設(shè)計(jì)---語(yǔ)法分析器
- 編譯原理課程設(shè)計(jì)--語(yǔ)法分析器
- 編譯原理語(yǔ)法分析器課程設(shè)計(jì)
- 編譯原理課程設(shè)計(jì)--- 詞法分析程序
- 編譯原理課程設(shè)計(jì)(c++)-語(yǔ)法分析器
- 編譯原理課程設(shè)計(jì)---ll(1)遞歸下降分析器
- 詞法分析器設(shè)計(jì)報(bào)告
- 編譯原理課程設(shè)計(jì)--表達(dá)式語(yǔ)法分析器
- 編譯原理課程設(shè)計(jì)-lr分析器總控程序的實(shí)現(xiàn)
- c-minus詞法分析和語(yǔ)法分析設(shè)計(jì)編譯器編譯原理課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論