簡(jiǎn)單的詞法分析器設(shè)計(jì)_第1頁(yè)
簡(jiǎn)單的詞法分析器設(shè)計(jì)_第2頁(yè)
簡(jiǎn)單的詞法分析器設(shè)計(jì)_第3頁(yè)
簡(jiǎn)單的詞法分析器設(shè)計(jì)_第4頁(yè)
簡(jiǎn)單的詞法分析器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩3頁(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、編譯原理課 程 設(shè) 計(jì)院 系 專 業(yè) 年 級(jí) 11級(jí) 學(xué) 號(hào) 姓 名 2014年 05月實(shí)驗(yàn)一 簡(jiǎn)單的詞法分析器設(shè)計(jì)一、設(shè)計(jì)內(nèi)容 熟悉并實(shí)現(xiàn)一個(gè)簡(jiǎn)單的詞法分析器二、設(shè)計(jì)目的 了解高級(jí)語(yǔ)言單詞的分類,了解如何識(shí)別單詞規(guī)則,掌握狀態(tài)圖到識(shí)別程序的編程。源程序中,存在許多編輯用的符號(hào),他們對(duì)程序邏輯功能無(wú)任何影響。例如:回車,換行,多余空白符,注釋行等。在詞法分析之前,首先要先剔除掉這些符號(hào),使得詞法分析更為簡(jiǎn)單。三、實(shí)驗(yàn)步驟1.將每個(gè)單詞符號(hào)進(jìn)行不同類別的劃分。單詞符號(hào)可以劃分成5中。 (1)標(biāo)識(shí)符:用戶自己定義的名字,常量名,變量名和過(guò)程名。(2)常數(shù):各種類型的常數(shù)。(3) 保留字(關(guān)鍵字):

2、如if、begin、then、while、do等。(4) 運(yùn)算符:如+、-、*、<、>、=等。(5)界符:如逗號(hào)、分號(hào)、括號(hào)等。2.將所有合法的單詞符號(hào)轉(zhuǎn)化為便于計(jì)算機(jī)處理的二元組形式:(單詞分類號(hào),單詞自身值);以圖形化界面顯示出來(lái)。3.可選擇性地將結(jié)果保存到文件中。四、概要設(shè)計(jì)1待分析的簡(jiǎn)單語(yǔ)言的詞法(1)關(guān)鍵字:while do relop letter id number所有關(guān)鍵字都是小寫。(2)運(yùn)算符和界符:: = + * / < <= <> > >= = ; ( ) #(3)其他單詞是標(biāo)識(shí)符(ID)和整型常數(shù)(NUM),通過(guò)以下正規(guī)式

3、定義: 如課本P20例2.6空格由空白、制表符和換行符組成??崭褚话阌脕?lái)分隔ID、NUM,運(yùn)算符、界符和關(guān)鍵字,詞法分析階段通常被忽略。 2詞法分析器的結(jié)構(gòu)源程序輸入緩沖區(qū)預(yù)處理子程序掃描緩沖區(qū)1掃描緩沖區(qū)2詞法分析子程序調(diào)用數(shù)據(jù)返回單詞圖6.1 詞法分析器的結(jié)構(gòu) 3部分單詞的正規(guī)式與狀態(tài)轉(zhuǎn)換圖圖6.2部分單詞的狀態(tài)轉(zhuǎn)換圖 4功能模塊表6.2 詞法分析器的C#程序過(guò)程或函數(shù)功能表過(guò)程或函數(shù)名簡(jiǎn)要功能說(shuō)明void scaner()分析源程序得到單個(gè)單詞并大致區(qū)分其類型,并生成二元組void main( )輸入源程序五、詳細(xì)設(shè)計(jì)1流程圖開始輸入C語(yǔ)言源程序初始化source逐個(gè)遍歷字符,并去除空格

4、符State 為0進(jìn)入switch分支循環(huán)判斷根據(jù)state的值選擇適當(dāng)?shù)奶幚碚{(diào)用相關(guān)函數(shù)輸出處理結(jié)果開始 圖7.1程序總體流程圖六、編程調(diào)試1.源代碼#include"stdio.h"#include"string.h"#include"iostream.h"char prog100,token20;char ch;int syn,p,m=0,n,row,sum=0;char *rwtab6="while","do","relop","letter",&

5、quot;id","number" 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'&

6、;&ch<='z')|(ch>='A'&&ch<='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=

7、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=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+=

8、ch;elsesyn=20;p-;break;case':':m=0;tokenm+=ch;ch=progp+;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;t

9、oken0=ch;break;case'':syn=26;token0=ch;break;case'(':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<<"請(qǐng)輸入字符串(字符#是字符串輸入結(jié)束標(biāo)志):"<<endl;

10、docin.get(ch);progp+=ch;while(ch!='#');cout<<"字符串輸出結(jié)果為:"<<endl;p=0;doscaner();switch(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<<","<<token<

溫馨提示

  • 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)論