下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 編譯原理實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱 自動(dòng)生成LR(0)分析表 實(shí)驗(yàn)時(shí)間 2011年6月13日 院系 計(jì)算機(jī)科學(xué)與技術(shù) 班級(jí) 08計(jì)算機(jī)科技一班 學(xué)號(hào) E 姓名 王全鴻 1. 試驗(yàn)?zāi)康妮斎耄喝我獾膲嚎s了的上下文無(wú)關(guān)文法。輸出:相應(yīng)的LR(0)分析表。2. 實(shí)驗(yàn)原理在LR分析工作過(guò)程中的任何時(shí)候,棧里的文法符號(hào)(自棧底而上)X1X2Xm應(yīng)該構(gòu)成活前綴,把輸入串的剩余部分配上之后即應(yīng)成為規(guī)范句型(如果整個(gè)輸入串確實(shí)構(gòu)成一個(gè)句子)。因此,只要輸入串的已掃描部分保持可歸約成一個(gè)活前綴,那就意味著所掃描過(guò)的部分沒(méi)有錯(cuò)誤。構(gòu)造識(shí)別文法活前綴DFA有3種方法:(1)根據(jù)形式定義求出活前綴的正
2、則表達(dá)式,然后由此正則表達(dá)式構(gòu)造NFA再確定為DFA;(2)求出文法的所有項(xiàng)目,按一定規(guī)則構(gòu)造識(shí)別活前綴的NFA再確定化為DFA;(3)使用閉包函數(shù)(CLOSURE)和轉(zhuǎn)向函數(shù)(GO(I,X)構(gòu)造文法G的LR(0)的項(xiàng)目集規(guī)范族,再由轉(zhuǎn)換函數(shù)建立狀態(tài)之間的連接關(guān)系來(lái)得到識(shí)別活前綴的DFA。對(duì)于LR(0)文法,我們可以直接從它的項(xiàng)目集規(guī)范族C和活前綴識(shí)別自動(dòng)機(jī)的狀態(tài)轉(zhuǎn)換函數(shù)GO構(gòu)造出LR分析表。下面是構(gòu)造LR(0)分析表的算法。假定C=I0, I1,,In,令每個(gè)項(xiàng)目集Ik的下標(biāo)k為分析器的一個(gè)狀態(tài),因此,G'的LR(0)分析表含有狀態(tài)0,1,n。令那個(gè)含有項(xiàng)目S'S的Ik的下標(biāo)
3、k為初態(tài)。ACTION子表和GOTO子表可按如下方法構(gòu)造:(1)若項(xiàng)目A.a屬于Ik且GO (Ik, a)= Ij, a為終結(jié)符,則置ACTIONk, a為“把狀態(tài)j和符號(hào)a移進(jìn)?!?,簡(jiǎn)記為“sj”;(2)若項(xiàng)目A屬于Ik,那么,對(duì)任何終結(jié)符a,置ACTIONk,a為“用產(chǎn)生式A進(jìn)行規(guī)約”,簡(jiǎn)記為“rj”;其中,假定A為文法G'的第j個(gè)產(chǎn)生式;(3)若項(xiàng)目S'S屬于Ik, 則置ACTIONk, #為“接受”,簡(jiǎn)記為“acc”;(4)若GO (Ik, A)= Ij, A為非終結(jié)符,則置GOTOk, A=j;(5)分析表中凡不能用上述1至4填入信息的空白格均置上“出錯(cuò)標(biāo)志”。按上述
4、算法構(gòu)造的含有ACTION和GOTO兩部分的分析表,如果每個(gè)入口不含多重定義,則稱它為文法G的一張LR(0)分析表。具有LR(0)表的文法G稱為一個(gè)LR(0)文法,LR(0)文法是無(wú)二義的。3. 實(shí)驗(yàn)內(nèi)容(1) 實(shí)現(xiàn)計(jì)算閉包c(diǎn)losure(I)的算法;(2) 實(shí)現(xiàn)轉(zhuǎn)向函數(shù)Go(q,a)的算法;(3)構(gòu)造文法項(xiàng)目集函數(shù)CreateProjectSet();定義數(shù)據(jù)結(jié)構(gòu):專心-專注-專業(yè)typedef struct SElemType *base,*top; int stacksize; SqStack;struct grammer char *g; char vt127; char vn27;
5、char s; int line;typedef struct prjsetint id;/項(xiàng)目集編號(hào),從10000開始,與項(xiàng)目編號(hào)(從0開始)區(qū)別struct prjset *next;/指向下個(gè)項(xiàng)目集char prjtPROJECT_SET_SIZE+1;/PROJECT_SET_SIZE個(gè)單元,存儲(chǔ)項(xiàng)目的編號(hào),prjt0項(xiàng)目編號(hào)的個(gè)數(shù)char pointafterPROJECT_SET_SIZE+1;/圓點(diǎn)后的字符,pointafter0字符個(gè)數(shù)struct prjset *actorgoPROJECT_SET_SIZE;char pointbefore;prjset,*pprjset;
6、4.實(shí)驗(yàn)心得通過(guò)這次實(shí)驗(yàn)我對(duì)LR(0)語(yǔ)法分析有了一個(gè)更熟悉的掌握,對(duì)預(yù)先定義的文法規(guī)則,并集成詞法分析、符號(hào)表管理等程序來(lái)生成LR(0)分析表有了清醒的認(rèn)識(shí),并且對(duì)高級(jí)程序語(yǔ)言一般結(jié)構(gòu)和主要共同特征有了全面的認(rèn)識(shí)和理解.5.實(shí)驗(yàn)代碼void CreateProjectSet()/構(gòu)造文法的項(xiàng)目集int i;int j;int k;int id = ID;pprjset p,q;root.I = root.tail = NULL;if(p = (pprjset)malloc(sizeof(prjset) = NULL) exit(1);p->id = id;p->next = NU
7、LL;p->prjt0 = 0;p->pointafter0 = 0;p->pointbefore = '0'for(j=0; j<PROJECT_SET_SIZE; j+)p->actorgoj = NULL;for(j=0; j<PROJECT_SET_SIZE; j+)p->actorgoj = NULL;root.I = p;root.tail = p;root.size = 1;for(i=0; i<project.line; i+)if(project.s=project.gpiGRAMMER_START_CHAR_P
8、OS&&DOT= project.gpiGRAMMER_START_CHAR_POS+1)JoinSet(root.I->prjt, project.gpiPROJECT_ID_POS);JoinSet(root.I->pointafter, project.gpiAFCHAR_POS);break;/if/forClosure(root.I);int pos;for(q=root.I; q!=NULL; q=q->next)for(i=1; i<=q->pointafter0; i+)pos = i;pos-;if(p = (pprjset)ma
9、lloc(sizeof(prjset) = NULL) exit(1);p->next = NULL;p->prjt0 = 0;p->pointafter0 = 0;p->pointbefore = q->pointafteri;for(j=0; j<PROJECT_SET_SIZE; j+)p->actorgoj = NULL;for(j=1; j<=q->prjt0; j+)if(project.gpq->prjtjAFCHAR_POS = p->pointbefore)go(q->prjtj, p);/forClos
10、ure(p);/判斷p指向的項(xiàng)目集是否已存在pprjset ptr;int flag;int flagsame;flagsame = 1;flag = 1;for(ptr=root.I; ptr!=NULL; ptr=ptr->next)flag = 1;if(p->prjt0 = ptr->prjt0)for(k=1; k<=p->prjt0; k+)if(!IsInSet(ptr->prjt, p->prjtk)flag = 0;break;/if/for/ifelseflag = 0;/elseif(flag = 0)flagsame = 0;e
11、lseflagsame = 1;break;/forif(flagsame)/flagsame = 1 , 有與*p相同的項(xiàng)目集,刪除*pq->actorgoi-1 = ptr;free(p);else/將p掛到root.tailq->actorgoi-1 = p;p->id = +id;root.tail->next = p;root.tail = p;root.size+;/for/for/CreateProjectSetvoid Closure(prjset *pset)/rk 為項(xiàng)目的編號(hào),prjset指向項(xiàng)目集int i;int j;int rk;for(i=
12、1; i<=pset->prjt0; i+)rk = pset->prjti;if(IsInSet(g.vn, project.gprkAFCHAR_POS)/若圓點(diǎn)后字符為vnfor(j=0; j<project.line; j+) if(project.gpjGRAMMER_START_CHAR_POS=project.gprkAFCHAR_POS && project.gpjGRAMMER_START_CHAR_POS+1 = DOT)JoinSet(pset->prjt, project.gpjPROJECT_ID_POS);JoinSet
13、(pset->pointafter, project.gpjAFCHAR_POS);/if/for/if/for/Closureint go(int rk, pprjset prjset)/rk為項(xiàng)目編號(hào),將rk的去向加入prjset指向的項(xiàng)目集中,返回項(xiàng)目編號(hào),若無(wú)返回-1int i;int j;int rksize;char rkS;char rkpointafter;if(rkpointafter = project.gprkAFCHAR_POS) = '0')return -1;int pointpos;pointpos = IsInSet(&projec
14、t.gprkPROJECT_LEN_POS, DOT);pointpos += PROJECT_LEN_POS;rksize = project.gprkPROJECT_LEN_POS;rkS = project.gprkGRAMMER_START_CHAR_POS;for(i=0; i<project.line; i+) if(project.gpiGRAMMER_START_CHAR_POS=rkS&&project.gpiPROJECT_LEN_POS = rksize && project.gpiBFCHAR_POS = rkpointafter)int flag;flag = 1;for(j=pointpos+2;j<=project.gpiPROJECT_LEN_POS+PROJECT_LEN_POS; j+)if(project.gpij != project.gprkj)flag = 0;break;/forif(flag)JoinSet(prjset->prjt, project.gpiPROJECT_ID_POS);/將項(xiàng)目加入項(xiàng)目集if(project.gpiAFCHAR_POS != '0')JoinSet(prjset
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)電腦交易協(xié)議格式(2024年)版A版
- 2025年度跨境電商平臺(tái)產(chǎn)品區(qū)域代理合同協(xié)議書4篇
- 科技前沿:資金驅(qū)動(dòng)創(chuàng)新
- 2025年度倉(cāng)儲(chǔ)物流場(chǎng)地租賃保證金三方服務(wù)協(xié)議4篇
- 2025年度柴油運(yùn)輸合同書(智能化物流服務(wù))4篇
- 2025年度綠色環(huán)保型鏟車租賃合作協(xié)議4篇
- 2025年智能餐飲連鎖店合作協(xié)議范本3篇
- 2025年度特色面館連鎖品牌加盟管理規(guī)范合同范本3篇
- 2025年度商業(yè)地產(chǎn)項(xiàng)目場(chǎng)地合作運(yùn)營(yíng)協(xié)議4篇
- 專業(yè)電線電纜供應(yīng)協(xié)議模板2024版
- 【公開課】同一直線上二力的合成+課件+2024-2025學(xué)年+人教版(2024)初中物理八年級(jí)下冊(cè)+
- 高職組全國(guó)職業(yè)院校技能大賽(嬰幼兒照護(hù)賽項(xiàng))備賽試題庫(kù)(含答案)
- 2024年公安部直屬事業(yè)單位招聘筆試參考題庫(kù)附帶答案詳解
- NB-T 47013.15-2021 承壓設(shè)備無(wú)損檢測(cè) 第15部分:相控陣超聲檢測(cè)
- 裝飾工程施工技術(shù)ppt課件(完整版)
- SJG 05-2020 基坑支護(hù)技術(shù)標(biāo)準(zhǔn)-高清現(xiàn)行
- 汽車維修價(jià)格表
- 10KV供配電工程施工組織設(shè)計(jì)
- 終端攔截攻略
- 藥物外滲處理及預(yù)防【病房護(hù)士安全警示教育培訓(xùn)課件】--ppt課件
評(píng)論
0/150
提交評(píng)論