簡單的詞法分析器設(shè)計_第1頁
簡單的詞法分析器設(shè)計_第2頁
簡單的詞法分析器設(shè)計_第3頁
簡單的詞法分析器設(shè)計_第4頁
簡單的詞法分析器設(shè)計_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

3、定義: 如課本P20例2.6空格由空白、制表符和換行符組成??崭褚话阌脕矸指鬒D、NUM,運算符、界符和關(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#程序過程或函數(shù)功能表過程或函數(shù)名簡要功能說明void scaner()分析源程序得到單個單詞并大致區(qū)分其類型,并生成二元組void main( )輸入源程序五、詳細設(shè)計1流程圖開始輸入C語言源程序初始化source逐個遍歷字符,并去除空格

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

評論

0/150

提交評論