版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)學(xué)時(shí):4實(shí)驗(yàn)類(lèi)型:驗(yàn)證實(shí)驗(yàn)要求:必修一、實(shí)驗(yàn)?zāi)康臉?gòu)造LR(1)分析程序,利用它進(jìn)行語(yǔ)法分析,判斷給出的符號(hào)串是否為該文法識(shí)別的句子,了解LR(K)分析方法是嚴(yán)格的從左向右掃描,和自底向上的語(yǔ)法分析方法。二、實(shí)驗(yàn)內(nèi)容對(duì)下列文法,用LR(1)分析法對(duì)任意輸入的符號(hào)串進(jìn)行分析:(產(chǎn)生式有誤,進(jìn)行修改)(1)E-E+T(2)E-E—T(E->T)(3)T-T*F(4)T-T/F(T->F)(5)F-(E)(6)F-i三、實(shí)驗(yàn)?zāi)康?、編程時(shí)注意編程風(fēng)格:空行的使用、注釋的使用、縮進(jìn)的使用等。2、如果遇到錯(cuò)誤的表達(dá)式,應(yīng)輸出錯(cuò)誤提示信息。3、程序輸入/輸出實(shí)例:輸入一以#結(jié)束的符號(hào)串(包括+—*/()i#):在此位置輸入符號(hào)串輸出過(guò)程如下:步驟狀態(tài)棧符號(hào)棧剩余輸入串 動(dòng)作1 0 # i+i*i# 移進(jìn)i+i*i的LR分析過(guò)程步驟狀態(tài)棧符號(hào)棧輸入串動(dòng)作說(shuō)明10#i+i*i#ACTION[0,i]=S5,狀態(tài)5入棧205#i+i*i#r6:Ffi歸約,6。10(0乃)=3入棧303#F+i*i#r::TfF歸約,6010(0,1)=3入棧402#T+i*i#f:EfT歸約,6010(0劉)=1入棧501#E+i*i#ACTION[1,+]=S6,狀態(tài)6入棧6016#E+i*i#ACTION[6,i]=S6,狀態(tài)5入棧70165#E+i*i#r6:Ffi歸約,3。10(6乃)=3入棧80163#E+F*i#r6:TfF歸約,6010(6,1)=9入棧90169#E+T*i#ACTION[9,*]=S7,狀態(tài)7入棧1001697#E+T*i#ACTION[7,i]=S7,狀態(tài)5入棧11016975#E+T*i#r6:Ffi歸約,601。(7廿)=10入棧120169710#E+T*F#r6:TfT*F歸約,GOTO(6,T)=9入棧130169#E+T#r1:EfE+T,GOTO(0,E)=1入棧1401#E#Acc:分析成功實(shí)驗(yàn)報(bào)告正文的內(nèi)容:描述LR(1)語(yǔ)法分析程序的設(shè)計(jì)思想:定義項(xiàng)目的一般形式是[A- - ,aa-a],這樣的一個(gè)項(xiàng)目稱(chēng)為一個(gè)LR(k)項(xiàng)目。項(xiàng)目中的aa-a稱(chēng)為V晶向箭搜索符串(或展望串),令K=l,即為L(zhǎng)R⑴語(yǔ)法分析程昌;在上匕,重新定義CLOSURE⑴的算法:項(xiàng)目集I的閉包CLOSURE(I)構(gòu)造方法:.I的任何項(xiàng)目都屬于CLOSURE(I)。.若項(xiàng)目[Af-B,a]屬于CLOSURE(I),是一個(gè)產(chǎn)生式,那么,對(duì)于FIRST(a)中的每個(gè)終結(jié)符b,如果[B--,b]原來(lái)不在CLOSURE(I)中,則把它加進(jìn)去。.重復(fù)執(zhí)行步驟2,直至CLOSURE(I)不再增大為止。GO()的算法保持與LR語(yǔ)法分析程序一樣,通過(guò)以下方法構(gòu)造文法分析表:動(dòng)作ACTION和狀態(tài)轉(zhuǎn)換GOTO構(gòu)造如下:.若項(xiàng)目[A--a,b]屬于<且G0(%a)=L,a為終結(jié)符,則置ACTION[k,a]為“sj”。及卜」.若項(xiàng)目[A--,a]屬于I,則置ACTIONS,a]為;其中假定Af為文法G的第j個(gè)產(chǎn)生式。3,若項(xiàng)目[SfS?,即屬于(,則置ACTION[k,即為“acc”。.若G0(I,A)=I,則置GOT(5[k,A]=jo.分析表4凡不能花規(guī)則1至4填入信息的空白欄均填上“出錯(cuò)標(biāo)志”。當(dāng)具體面對(duì)輸入串時(shí),通過(guò)查表進(jìn)行分析該進(jìn)行何種動(dòng)作。程序結(jié)構(gòu)描述:函數(shù)調(diào)用格式、參數(shù)含義、返回值描述、函數(shù)功能均在程序源代碼出注釋出來(lái),在此不再贅述,詳細(xì)含義請(qǐng)參照源代碼cpp文件。詳細(xì)的算法描述(程序執(zhí)行流程圖):(1)總控程序,也可以稱(chēng)為驅(qū)動(dòng)程序。對(duì)所有的LR分析器總控程序都是相同的。⑵分析表或分析函數(shù),不同的文法分析表將不同,同一個(gè)文法采用的LR分析器不同時(shí),分析表將不同,分析表又可以分為動(dòng)作表(ACTION)和狀態(tài)轉(zhuǎn)換(GOTO)表兩個(gè)部分,它們都可用二維數(shù)組表示。⑶分析棧,包括文法符號(hào)棧和相應(yīng)的狀態(tài)棧,它們均是先進(jìn)后出棧。分析器的動(dòng)作就是由棧頂狀態(tài)和當(dāng)前輸入符號(hào)所決定。LR分析器由三個(gè)部分組成:LR分析器結(jié)構(gòu):其中:SP為棧指針,S[i]為狀態(tài)棧,X[i]為文法符號(hào)棧。狀態(tài)轉(zhuǎn)換表用GOTO",X]=j表示,規(guī)定當(dāng)棧頂狀態(tài)為i,遇到當(dāng)前文法符號(hào)為X時(shí)應(yīng)轉(zhuǎn)向狀態(tài)j,X為終結(jié)符或非終結(jié)符。ACTION[i,a]規(guī)定了棧頂狀態(tài)為i時(shí)遇到輸入符號(hào)a應(yīng)執(zhí)行。動(dòng)作有四種可能:⑴移進(jìn):action[i,a]=Sj:狀態(tài)j移入到狀態(tài)棧,把a(bǔ)移入到文法符號(hào)棧,其中i,j表示狀態(tài)號(hào)。⑵歸約:action[i,a]=rk:當(dāng)在棧頂形成句柄時(shí),則歸約為相應(yīng)的非終結(jié)符A,即文法中有A-B的產(chǎn)生式,若B的長(zhǎng)度為R(即|B|二R),則從狀態(tài)棧和文法符號(hào)棧中自頂向下去掉R個(gè)符號(hào),即棧指針SP減去R,并把人移入文法符號(hào)棧內(nèi),j=GOTO[i,A]移進(jìn)狀態(tài)棧,其中i為修改指針后的棧頂狀態(tài)。⑶接受acc:當(dāng)歸約到文法符號(hào)棧中只剩文法的開(kāi)始符號(hào)S時(shí),并且輸入符號(hào)串已結(jié)束即當(dāng)前輸入符是‘#',則為分析成功。(4)報(bào)錯(cuò):當(dāng)遇到狀態(tài)棧頂為某一狀態(tài)下出現(xiàn)不該遇到的文法符號(hào)時(shí),則報(bào)錯(cuò),說(shuō)明輸入端不是該文法能接受的符號(hào)串。本程序原本的設(shè)計(jì)思想與實(shí)驗(yàn)二相仿,但由于此種設(shè)計(jì)思想會(huì)導(dǎo)致程序靈活性大大降低,故對(duì)設(shè)計(jì)思想進(jìn)行優(yōu)化,在此,不在對(duì)原程序設(shè)計(jì)思想進(jìn)行闡述,僅對(duì)改良后的程序設(shè)計(jì)思想進(jìn)行闡述。該文法的LR(1)分析表:算術(shù)表達(dá)式文法的LR分析表狀態(tài)ACTIONGOTOi+*()#ETF0S5S41231S6acc2r2S7r2r23r4r4r4r44S5S48235r6r6r6r66S5S4937S5S4108S6S119r1S7r1r110r3r3r3r311rrrr本程序根據(jù)給出的LR(1)文法分析表,構(gòu)造string類(lèi)的action[12][6]={"S5","0","0","S4","0","0",&"E:\5tudF.PPT'.潴詳康專(zhuān)口ebug\^t?2.exe""E:\Etjdy\.PPT\轅譚康武Debug^56S2,exe[分、,斤KM**MMKMMK*MMM:/MM寅 MMM:X*區(qū)分析文法產(chǎn)生式為 “:->E+Trb:F->iB分析成功acc是否繼續(xù)分析T或y繼續(xù)動(dòng)作說(shuō)明ficnoNra,<]^:4,1ACIIDN[4,il^5,iMIIONth〉17士i,狀態(tài):L:[大樓
K:F-XE)歸約:GoTo<0,F>=3
r4:T->F歸縱Goin⑶T>=2我
t理:E-3T歸的,GoTo<0,E)=1A分,機(jī)M-r ■?■?>1,]<**]<]<演?看風(fēng)如用言風(fēng)風(fēng)愜同風(fēng)風(fēng)犬LRCl)分J斤 MMKMOC/MMMJ(MM:X*― ‘ 、Ir?Goro<4,F)=3/\rar4:T-〉F歸縱
m:E-yr歸約,GdT(j44,T)=2應(yīng)域
配1口《44)印就棧找,GoTo<6,F>=3AS由CIIONE,*]=2?/悔
ACII0hl:7,i]-35,l^rt:F->i[
r4:T->F!、-亓T|i**t*r*相*t*hh州****片依=*抬妹安?t
日露息鬻狀態(tài)出棧rb:F7i歸約f4:T->F歸約,GnT(K6,T>=9/棧r6:F->i歸約,Gor(]《?,F>=l(J入棧
r3:T-3T*F歸約.Gur(j《6.T〉A(chǔ)入帶
pLEQE'T歸約:GaTe>《0,E〉¥i入棧密用祗功fiCTI0N[l,+l=S6,^ACIION:G,il^JE,i^-,CoTa<0,F>=aX^
一Gold陽(yáng),T)=2忒嘮r2:E->T月約,Gora<0,E>=lAfeF->i?MMMXKXX就 MXMMXXMMX]jR1cl1分、;1斤KMX就MXXMX ■宜就XMHXMJCX7葡史字符串+i?i#<i*i#+i*itU1659163B1G9ttE+ittE+FitE+T016?? #£*T*?16975#E+I*i016971S#E+T*F91G9#E+T符號(hào)棧-->1日:MM:)C MMK*連輸次字符串|Ci>Eajtyji/-w噂-具一尺jfjf*狀態(tài)棧符號(hào)棧剩余attCi>it04#<i>#H45>?043tt<F)#342ittT348#<E>#04811tt<E>tt93#F#92ttTft91*Ett042U<T'E:'studyVPPI儡譚l^\Debug^iSZ.exe9480481133r2:E->TlJ3^J,GoTuS.EAF人棧
第nIONm1=Sil,狀態(tài)li入戕
r5:F-)<E>歸約.GuT(j<@.F)4人棧
v4:T-3F歸約,CoTo總?cè)氚?/p>
h£;E-,T歸約,GoTuF.EAl?我棧
acc 流所成功驟r6:F-'i歸匏,
r4:T-)F歸”,
r2:E-3T歸約,3T(j44,F>=3入榜GoTo<4,T>=2A.''
CjT<j<4㈤印入第11511:山〉1畤11,狀態(tài)1:1人棧K:F-XE)歸約:GuT(K@,F)=3人棧
r4:T-〉F歸閡.Gold?!梗?2人棧
MII0N[2,*]=G7,狀態(tài)?其橇
ACII0N:7,<]T4,狀態(tài)4人相動(dòng)作說(shuō)明MIION⑶(]鵬4,狀態(tài)4久嚙
fiCII0h[4,ll^S5,狀態(tài)5人棧俞人字符串tt<E#<E>ttF狀態(tài)棧符號(hào)棧剩余輸,3#04!>*<??045tt<i>*<>#343tt<F>*<>#342#<T>*<>#348tt<E>*<>#04811tt<E>阻#F32itT*C>tt027#T"<>#Error迎ength()-3;for(intj=0;j<N;j++){t(0)<<")=";(Production[i-1].at(0));t(0)=='S'){action[i][t].erase(0,1);_$5()),$);_$5()),將action[i][t]轉(zhuǎn)換為整型action[i][t].insert(0,"S");t(0)=='r'){@/10口[1]壓].6「@$6(0,1);_$宜()),$);_$5()),將action[i][t]轉(zhuǎn)換為整型action[i][t].insert(0,"r");//將r添加回action[i][t]}}elseif(action[i][t]=="0"){cout<<"\tError"<<endl;break;}elseif(action[i][t]=="acc"){Output(s);cout<<"acc"<<"\t分析成功"<<endl;break;}}elseif(flag==false)break;}}intmain(){strings;cout<<"************************LR(1)分析*************************”<<endl;cout<<"本分析文法產(chǎn)生式為"<<endl;for(intj=0;j<6;j++)cout<<Production[j]<<endl;cout<<"************************LR(1)分析*************************”<<endl;charT;do{cout<<"輸入字符串"<<endl;。也>公;//輸入要分析的字符串cout<<"************************現(xiàn)進(jìn)行如下分析*************************”<<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旋臂穩(wěn)定性與擾動(dòng)-洞察分析
- 雙氯西林鈉基因編輯技術(shù)-洞察分析
- 新能源汽車(chē)安全評(píng)估與風(fēng)險(xiǎn)控制研究-洞察分析
- 網(wǎng)絡(luò)安全風(fēng)險(xiǎn)評(píng)估-第3篇-洞察分析
- 用戶(hù)體驗(yàn)心理研究-洞察分析
- 無(wú)人機(jī)高效能源管理-洞察分析
- 修身養(yǎng)性、贏在職場(chǎng)有效課件情商與影響力
- 碳納米材料研究-洞察分析
- 微服務(wù)化架構(gòu)性能調(diào)優(yōu)-洞察分析
- 網(wǎng)格安全與隱私保護(hù)-洞察分析
- 支氣管動(dòng)脈造影護(hù)理
- 校園春季安全
- 2024-2025學(xué)年六上科學(xué)期末綜合檢測(cè)卷(含答案)
- 【MOOC】工程力學(xué)-浙江大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 2024年湖南省公務(wù)員考試《行測(cè)》真題及答案解析
- 產(chǎn)房年終總結(jié)及明年計(jì)劃
- 北京交通大學(xué)《數(shù)據(jù)結(jié)構(gòu)與算法》2021-2022學(xué)年期末試卷
- 足球體育說(shuō)課
- 【粵教】八上地理知識(shí)點(diǎn)總結(jié)
- 人教鄂教版五年級(jí)上冊(cè)科學(xué)復(fù)習(xí)資料
- TCGMA0330012018壓縮空氣站能效分級(jí)指南
評(píng)論
0/150
提交評(píng)論