版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、【實驗名稱】 SLR(1)語法分析【實驗?zāi)康摹繕?gòu)造LR(1)分析程序,利用它進(jìn)行語法分析,判斷給出的符號串是否為該文法識別的句子,了解LR(K)分析方法是嚴(yán)格的從左向右掃描,和自底向上的語法分析方法?!緦嶒瀮?nèi)容】對下列文法,用LR(1)分析法對任意輸入的符號串進(jìn)行分析: (1)S-E(2)E-E+T(3)E-T(4)T-T*F(5)T-F(6)F-(E)(7)F-i【設(shè)計思想】(1)總控程序,也可以稱為驅(qū)動程序。對所有的LR分析器總控程序都是相同的。(2)分析表或分析函數(shù),不同的文法分析表將不同,同一個文法采用的LR分析器不同時,分析表將不同,分析表又可以分為動作表(ACTION)和狀態(tài)轉(zhuǎn)換(
2、GOTO)表兩個部分,它們都可用二維數(shù)組表示。(3)分析棧,包括文法符號棧和相應(yīng)的狀態(tài)棧,它們均是先進(jìn)后出棧。分析器的動作就是由棧頂狀態(tài)和當(dāng)前輸入符號所決定。u LR分析器由三個部分組成:u 其中:SP為棧指針,Si為狀態(tài)棧,Xi為文法符號棧。狀態(tài)轉(zhuǎn)換表用GOTOi,X=j表示,規(guī)定當(dāng)棧頂狀態(tài)為i,遇到當(dāng)前文法符號為X時應(yīng)轉(zhuǎn)向狀態(tài)j,X為終結(jié)符或非終結(jié)符。u ACTIONi,a規(guī)定了棧頂狀態(tài)為i時遇到輸入符號a應(yīng)執(zhí)行。動作有四種可能:(1)移進(jìn): actioni,a= Sj:狀態(tài)j移入到狀態(tài)棧,把a(bǔ)移入到文法符號棧,其中i,j表示狀態(tài)號。(2)歸約: actioni,a=rk:當(dāng)在棧頂形成句柄
3、時,則歸約為相應(yīng)的非終結(jié)符A,即文法中有A- B的產(chǎn)生式,若B的長度為R(即|B|=R),則從狀態(tài)棧和文法符號棧中自頂向下去掉R個符號,即棧指針SP減去R,并把A移入文法符號棧內(nèi),j=GOTOi,A移進(jìn)狀態(tài)棧,其中i為修改指針后的棧頂狀態(tài)。(3)接受acc: 當(dāng)歸約到文法符號棧中只剩文法的開始符號S時,并且輸入符號串已結(jié)束即當(dāng)前輸入符是#,則為分析成功。(4)報錯:當(dāng)遇到狀態(tài)棧頂為某一狀態(tài)下出現(xiàn)不該遇到的文法符號時,則報錯,說明輸入端不是該文法能接受的符號串。【實驗要求】1、編程時注意編程風(fēng)格:空行的使用、注釋的使用、縮進(jìn)的使用等。2、如果遇到錯誤的表達(dá)式,應(yīng)輸出錯誤提示信息。 3、程序輸入/
4、輸出實例: 輸入一以#結(jié)束的符號串(包括+*/()i#):在此位置輸入符號串 輸出過程如下:步驟 狀態(tài)棧 符號棧 剩余輸入串 動 作 1 0 # i+i*i# 移進(jìn) 【流程圖】【源代碼】#include#includeint Action126=105,0,0,104,0,0,0,106,0,0,0,-1,0,52,107,0,52,52,0,54,54,0,54,54,105,0,0,104,0,0,0,56,56,0,56,56,105,0,0,104,0,0,105,0,0,104,0,0,0,106,0,0,111,0,0,51,107,0,51,51,0,53,53,0,53,53,
5、0,55,55,0,55,55;int Goto123=1,2,3,0,0,0,0,0,0,0,0,0,8,2,3,0,0,0,0,9,3,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0;char Grammar2010=0;char VT10,VN10;char AVT6=i,+,*,(,),#;char GVN3=E,T,F;int vnNum,vtNum,stateNum=12;int VNum10;int grammarNum;typedef structchar *base;char *top;SymbolStack;typedef structint *base;in
6、t *top;StateStack;StateStack state;SymbolStack symbol;int ScanGrammar()FILE *fp=fopen(SLR文法.txt,r); FILE *tp;char singleChar,nextChar;int i=0,j=0,k,count;while(!feof(fp)fscanf(fp,%c,&singleChar);if(singleChar=?)Grammarij=0;break;if(singleChar=n)Grammarij=0;i+;j=0;continue;if(singleChar=-)tp=fp;fscan
7、f(tp,%c,&nextChar);if(nextChar=)fp=tp;continue;if(singleChar=|)Grammari+10=Grammari0;Grammarij=0; i+;j=1;continue;Grammarij=singleChar;if(singleChar=A&singleChar=Z)count=0;while(VNcount!=singleChar&VNcount!=0)count+;if(VNcount=0)vnNum=count+1;if(singleChar=S)j+;continue;VNcount=singleChar;vnNum=coun
8、t+1;else count=0;while(VTcount!=singleChar&VTcount!=0)count+;if(VTcount=0)VTcount=singleChar;vtNum=count+1;j+;printf(輸入的文法:n);for(k=0;k);printf(%c,Grammarkj);j+; printf(n);count=0;printf(VT:);while(VTcount!=0)printf(%3c,VTcount); count+;VTcount=#;vtNum=count+1;printf(%3c,VTcount);printf(nVN:);count=
9、0;while(VNcount!=0)printf(%3c,VNcount);count+;printf(n);/printf(n%d %dn,vtNum,vnNum);fclose(fp);grammarNum=i+1; return i;int vNumCount()int i,j;for(i=0;igrammarNum;i+)j=1;while(Grammarij!=0)j+;VNumi=j;/printf(%3d,VNumi);printf(n);return 0;void InitStack()state.base=(int *)malloc(100*sizeof(int);if(!
10、state.base)exit(1);state.top=state.base;*state.top=0;symbol.base=(char *)malloc(100*sizeof(char);if(!symbol.base)exit(1);symbol.top=symbol.base;*symbol.top=#;int Judge(int stateTop,char inputChar)int i,j;for(i=0;istateNum;i+)if(stateTop=i)break;for(j=0;jvtNum;j+)if(inputChar=AVTj)break;return Action
11、ij;int GetGoto(int stateTop,char inputChar)int i,j;for(i=0;istateNum;i+)if(stateTop=i)break;for(j=0;jvnNum;j+)if(inputChar=GVNj)break;return Gotoij;int print(int count,int i,char Input,int action,int gt,int sign)int *p=state.base,stateNum;int j,jj;char *q=symbol.base,symbolNum;printf(%dt,count);while(p!=state.top+1)stateNum=*p;printf(%d,stateNum);p+;printf(t);while(q!=symbol.top+1)symbolNum=*q;printf(%c,symbolNum);q+;printf(t);j=i;jj=0;while(jj=A&Inputi=100)sign=1;action=ssValue-100;state.top+;*state.top=action;symbol.top+;*symbol.top=Inputi;i+;print(count,i,Input,action,0,sign);count+;if(
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 定點醫(yī)院執(zhí)行規(guī)范制度
- 經(jīng)濟(jì)聯(lián)絡(luò)員制度規(guī)范
- 學(xué)校衣物制度規(guī)范
- 食品衛(wèi)生規(guī)范制度
- 規(guī)范資料管理制度
- 鱷魚養(yǎng)殖制度規(guī)范
- 物流車隊規(guī)范制度
- 配電監(jiān)護(hù)制度規(guī)范
- 直銷規(guī)范制度
- 陣地規(guī)范管理制度
- 有機(jī)磷農(nóng)藥中毒患者的護(hù)理
- 電力合規(guī)管理辦法
- 鶴壁供熱管理辦法
- 01 華為采購管理架構(gòu)(20P)
- 糖尿病逆轉(zhuǎn)與綜合管理案例分享
- 工行信息安全管理辦法
- 2025高中思想政治課標(biāo)測試卷(及答案)
- 化學(xué)●廣西卷丨2024年廣西普通高中學(xué)業(yè)水平選擇性考試高考化學(xué)真題試卷及答案
- 2024年全國大學(xué)生西門子杯工業(yè)自動化挑戰(zhàn)賽-ITEM2-邏輯控制賽項-工程設(shè)拓夢者隊計文件
- 軌跡大數(shù)據(jù)處理技術(shù)的關(guān)鍵研究進(jìn)展綜述
- 被打和解協(xié)議書范本
評論
0/150
提交評論