下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上 編譯原理實驗報告實驗名稱 自動生成LR(0)分析表 實驗時間 2011年6月13日 院系 計算機(jī)科學(xué)與技術(shù) 班級 08計算機(jī)科技一班 學(xué)號 E 姓名 王全鴻 1. 試驗?zāi)康妮斎耄喝我獾膲嚎s了的上下文無關(guān)文法。輸出:相應(yīng)的LR(0)分析表。2. 實驗原理在LR分析工作過程中的任何時候,棧里的文法符號(自棧底而上)X1X2Xm應(yīng)該構(gòu)成活前綴,把輸入串的剩余部分配上之后即應(yīng)成為規(guī)范句型(如果整個輸入串確實構(gòu)成一個句子)。因此,只要輸入串的已掃描部分保持可歸約成一個活前綴,那就意味著所掃描過的部分沒有錯誤。構(gòu)造識別文法活前綴DFA有3種方法:(1)根據(jù)形式定義求出活前綴的正
2、則表達(dá)式,然后由此正則表達(dá)式構(gòu)造NFA再確定為DFA;(2)求出文法的所有項目,按一定規(guī)則構(gòu)造識別活前綴的NFA再確定化為DFA;(3)使用閉包函數(shù)(CLOSURE)和轉(zhuǎn)向函數(shù)(GO(I,X)構(gòu)造文法G的LR(0)的項目集規(guī)范族,再由轉(zhuǎn)換函數(shù)建立狀態(tài)之間的連接關(guān)系來得到識別活前綴的DFA。對于LR(0)文法,我們可以直接從它的項目集規(guī)范族C和活前綴識別自動機(jī)的狀態(tài)轉(zhuǎn)換函數(shù)GO構(gòu)造出LR分析表。下面是構(gòu)造LR(0)分析表的算法。假定C=I0, I1,,In,令每個項目集Ik的下標(biāo)k為分析器的一個狀態(tài),因此,G'的LR(0)分析表含有狀態(tài)0,1,n。令那個含有項目S'S的Ik的下標(biāo)
3、k為初態(tài)。ACTION子表和GOTO子表可按如下方法構(gòu)造:(1)若項目A.a屬于Ik且GO (Ik, a)= Ij, a為終結(jié)符,則置ACTIONk, a為“把狀態(tài)j和符號a移進(jìn)?!保営洖椤皊j”;(2)若項目A屬于Ik,那么,對任何終結(jié)符a,置ACTIONk,a為“用產(chǎn)生式A進(jìn)行規(guī)約”,簡記為“rj”;其中,假定A為文法G'的第j個產(chǎn)生式;(3)若項目S'S屬于Ik, 則置ACTIONk, #為“接受”,簡記為“acc”;(4)若GO (Ik, A)= Ij, A為非終結(jié)符,則置GOTOk, A=j;(5)分析表中凡不能用上述1至4填入信息的空白格均置上“出錯標(biāo)志”。按上述
4、算法構(gòu)造的含有ACTION和GOTO兩部分的分析表,如果每個入口不含多重定義,則稱它為文法G的一張LR(0)分析表。具有LR(0)表的文法G稱為一個LR(0)文法,LR(0)文法是無二義的。3. 實驗內(nèi)容(1) 實現(xiàn)計算閉包closure(I)的算法;(2) 實現(xiàn)轉(zhuǎn)向函數(shù)Go(q,a)的算法;(3)構(gòu)造文法項目集函數(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;/項目集編號,從10000開始,與項目編號(從0開始)區(qū)別struct prjset *next;/指向下個項目集char prjtPROJECT_SET_SIZE+1;/PROJECT_SET_SIZE個單元,存儲項目的編號,prjt0項目編號的個數(shù)char pointafterPROJECT_SET_SIZE+1;/圓點后的字符,pointafter0字符個數(shù)struct prjset *actorgoPROJECT_SET_SIZE;char pointbefore;prjset,*pprjset;
6、4.實驗心得通過這次實驗我對LR(0)語法分析有了一個更熟悉的掌握,對預(yù)先定義的文法規(guī)則,并集成詞法分析、符號表管理等程序來生成LR(0)分析表有了清醒的認(rèn)識,并且對高級程序語言一般結(jié)構(gòu)和主要共同特征有了全面的認(rèn)識和理解.5.實驗代碼void CreateProjectSet()/構(gòu)造文法的項目集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指向的項目集是否已存在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相同的項目集,刪除*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 為項目的編號,prjset指向項目集int i;int j;int rk;for(i=
12、1; i<=pset->prjt0; i+)rk = pset->prjti;if(IsInSet(g.vn, project.gprkAFCHAR_POS)/若圓點后字符為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為項目編號,將rk的去向加入prjset指向的項目集中,返回項目編號,若無返回-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);/將項目加入項目集if(project.gpiAFCHAR_POS != '0')JoinSet(prjset
溫馨提示
- 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è)學(xué)院《英美文學(xué)鑒賞與批評》2023-2024學(xué)年第一學(xué)期期末試卷
- 貴州電力職業(yè)技術(shù)學(xué)院《高級日語2》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025上海建筑安全員-B證考試題庫附答案
- 貴陽人文科技學(xué)院《中醫(yī)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣州珠江職業(yè)技術(shù)學(xué)院《食品安全與衛(wèi)生實驗》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025天津市建筑安全員A證考試題庫及答案
- 新建100畝冬暖式日光溫室蔬菜基地建設(shè)項目可行性研究報告
- 2025天津市安全員A證考試題庫
- 2025吉林省安全員《B證》考試題庫及答案
- 2025陜西省建筑安全員-A證考試題庫及答案
- 2025年湖南出版中南傳媒招聘筆試參考題庫含答案解析
- 2025年度商用廚房油煙機(jī)安裝與維護(hù)服務(wù)合同范本3篇
- 2024年03月恒豐銀行2024年春季招考畢業(yè)生筆試歷年參考題庫附帶答案詳解
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實踐指導(dǎo)材料之14:“6策劃-6.3變更的策劃”(雷澤佳編制-2025B0)
- 2024年特厚板行業(yè)現(xiàn)狀分析:中國特厚板市場占總銷售量45.01%
- 2025年中國地質(zhì)調(diào)查局烏魯木齊自然資源綜合調(diào)查中心招聘19人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2024版影視制作公司與演員經(jīng)紀(jì)公司合作協(xié)議3篇
- 2024年上海市初三語文二模試題匯編之記敘文閱讀
- 2024年度上海市嘉定區(qū)工業(yè)廠房買賣合同2篇
- 2023-2024學(xué)年廣東省廣州市海珠區(qū)九年級(上)期末化學(xué)試卷(含答案)
- SAP WM模塊前臺操作詳解(S4版本)
評論
0/150
提交評論