




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)編譯原理實(shí)驗(yàn)報告實(shí)驗(yàn)名稱 消除文法的左遞歸 實(shí)驗(yàn)時間 2015年5月19日 院系 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 班級 學(xué)號 姓名 實(shí)驗(yàn)?zāi)康妮斎耄喝我獾恼?guī)文法。輸出:相應(yīng)的正規(guī)式。實(shí)驗(yàn)原理3型文法(正則文法,線性文法) 如果對于某文法G,P中的每個規(guī)則具有下列形式:U : = T 或 U : = WT其中TVT;U,WVN,則稱該文法G為左線性文法。如果對于某文法G,P中的每個規(guī)則具有下列形式:U : = T 或 U : = TW其中TVT;U, WVN,則稱該文法G為右線性文
2、法。左線性文法和右線性文法通稱為3型文法或正則文法,有時又稱為有窮狀態(tài)文法,簡寫為RG。按照定義,對于正則文法應(yīng)用規(guī)則時,單個非終結(jié)符號只能被替換為單個終結(jié)符號,或被替換為單個非終結(jié)符號加上單個終結(jié)符號,或者被替換為單個終結(jié)符號加上單個非終結(jié)符號。3型文法所確定的語言為3型語言L3,3型語言可由確定的有限狀態(tài)自動機(jī)來識別。程序設(shè)計(jì)語言的單詞可由正則文法產(chǎn)生,例如,標(biāo)識符的定義可由正則文法描述如下::=/顯然,該文法描述了以字母開頭的字母數(shù)字串的集合?,F(xiàn)在要引入另一種適合于描述單詞的表示法正則表達(dá)式。正則表達(dá)式又稱為正則式,每個正則表達(dá)式描述的集合稱為正則集。之所以采用正則表達(dá)式來描述,主要基于
3、以下幾點(diǎn)原因:詞法規(guī)則簡單,無需上下文無關(guān)文法那樣嚴(yán)格的表示法,用正則式表示法來理解被定義的符號集合比理解由重寫規(guī)則集合定義的語言更為容易;從正則式構(gòu)造高效識別程序比上下文無關(guān)文法更容易;可以從某個正則式自動地構(gòu)造識別程序,它可以識別用該正則式表示的字符串集合中的字符串,從而減輕后面要介紹的詞法分析時的工作量??捎糜谄渌鞣N信息流的處理,例如,已經(jīng)應(yīng)用于某些模式識別問題、文獻(xiàn)目錄檢索系統(tǒng)以及正文編輯程序等。正則表達(dá)式和正則集設(shè)有字母表。上的正則表達(dá)式和它所表示的正則集遞歸地定義如下:和都是上的正則表達(dá)式,它們所表示的正則集分別為和,其中是空串,是空集;任意的a是正則表達(dá)式,它所表示的正則集是a
4、;如果e1和e2是上的任意的正則表達(dá)式,且分別表示的正則集為L(e1)和L(e2),則:e1/e2也是正則表達(dá)式,表示的正則集為L(e1 / e2)L(e1)L(e2)。e1 e2也是正則表達(dá)式,表示的正則集為L(e1 e2)L(e1)L(e2)。(e1)*也是正則表達(dá)式,表示的正則集為L(e1)*)L(e1)*。定義中(1)和(2)定義了原子正則表達(dá)式,而(3)則表明字母表上的正則表達(dá)式可由原子正則表達(dá)式或較簡單的正則表達(dá)式通過聯(lián)合、連接與閉包運(yùn)算構(gòu)成一般的正則表達(dá)式。正則表達(dá)式的性質(zhì)如果兩個正則表達(dá)式e1和e2表示的正則集相同,即值相等,則稱它們是等價的。記為e1e2。正則表達(dá)式與正則文法
5、的關(guān)系一個正則表達(dá)式的值是正則集,它是正則語言的另一種表示法。不難看出,除了符號外,一個正則表達(dá)式的含義類似于正則文法的一個非終結(jié)符號規(guī)則右部的含義。例如,對于 := 0/1/2/9,由非終結(jié)符數(shù)字所產(chǎn)生的字符串集合與正則表達(dá)式0/1/2/9所定義的字符串集合是相同的。正則集,它對應(yīng)一個不包含任何句子的語言,引進(jìn)的目的主要是為了理論上的完備性。3.實(shí)驗(yàn)內(nèi)容由正規(guī)(則)文法構(gòu)造正規(guī)(則)式4.實(shí)驗(yàn)心得通過實(shí)驗(yàn)明確了正規(guī)文法構(gòu)造正規(guī)式的方法,對正規(guī)式及正規(guī)文法有了進(jìn)一步的認(rèn)識欲了解 5.實(shí)驗(yàn)代碼與結(jié)果#include#includeusing namespace std;struct WF/產(chǎn)生式
6、 string left; /左 string right; /右;/正規(guī)文法轉(zhuǎn)換為正規(guī)式/轉(zhuǎn)換規(guī)則1(A-xB,B-y-A-xy)/轉(zhuǎn)換規(guī)則2 (A-x,A|y-A-x*(y)/轉(zhuǎn)換規(guī)則3(A-x,A-y,-A-x|y)void transform(WF *p,int n) int i,j,m,flag; /合并產(chǎn)生式 for (i=0; in; i+)for(j=i+1; jaA,A(S)-bA-A(S)-aA|bA的形式 if(pi.left=pj.left)&(pi.right1=pj.right1) pi.right=pi.right+|+pj.right; pj.left=; pj
7、.right=; /合并:轉(zhuǎn)換規(guī)則3(合并如S-a,S-b,S-c-S-a|b|c的形式) if(pi.right.length()=1&pj.right.length()=1&pi.left=pj.left) pi.right=pi.right+|+pj.right; pj.left=; pj.right=; /提取公因式:如S-aA|bA-S-(a|b)A的形式 for(i=0; i2&A=pi.right1&pi.right1=Z&pi.right2=|) for(j=1; ja |b ; if(j=flag-1) pi.right=(+pi.right.substr(0,pi.righ
8、t.length()-1)+)+pi.right.substr(pi.right.length()-1);/S-(a|b)A; /轉(zhuǎn)換規(guī)則2.1 (A-xA|y-A-x*(y) for(i=0; i(a|d)A(a|d) if(pi.left0=pi.rightpi.right.length()-1&pi.right.length()1) for(j=0; ja|d for(m=0; mpj.right.length(); m+) if(A=pj.rightm&pj.rightm(a|d)*(a|d) pj.right=; pj.left=; /轉(zhuǎn)換規(guī)則2.2(S-(xx)A A-aA 轉(zhuǎn)化為
9、S-(xx)a*A) for(i=0; i1 & pi.left0!=pi.rightpi.right.length()-1)/左部的非終結(jié)符不等于右部的最后一個 for(j=0; j1 & pi.rightpi.right.length()-1=pj.left0 & pj.left0=pj.rightpj.right.length()-1) pi.right=pi.right.substr(0,pi.right.length()-1)+pj.right.substr(0,pj.right.length()-1)+*+pj.rightpj.right.length()-1; pj.right=
10、; pj.left=; /將表達(dá)式右部所有非終結(jié)符替換 flag=n; while(flag=0)/當(dāng)所有產(chǎn)生式的右部均為終結(jié)符構(gòu)成時停止轉(zhuǎn)換 for(i=0,flag=flag-1; in; i+) for(j=0; jpi.right.length(); j+) if(A=pi.rightj&pi.rightj=Z) for(m=0; mn; m+) if(pm.left0=pi.rightj&m!=i) pi.right=pi.right.substr(0,j)+pm.right+pi.right.substr(j+1); pm.left=; pm.right=; break; /再次合
11、并左部相等的產(chǎn)生式 for(i=0; in; i+) for(j=0; j1) pi.right=pi.right+|+(+pj.right+); pj.left=; pj.right=; else pi.right=pi.right+|+pj.right; pj.left=; pj.right=; /判斷文法類型bool IsZero(WF *p,int n) /判斷0型文法(左部不含非終結(jié)符則不是0型文法) int i,j; for(i=0; in; i+) /遍歷所有產(chǎn)生式 for(j=0; j=A&pi.leftj=Z) break; if(j=pi.left.length() cou
12、t該文法不是0型文法endl; return false; if(i=n) return true;/如果每個產(chǎn)生式都能找到非終結(jié)符bool IsFirst(WF *p,int n) /判斷1型文法(右邊長度大于等于左邊長度) if(IsZero(p,n) /先判斷是否是0型文法 int i; for(i=0; ipi.right.length()&pi.right.length()!=0) /判斷產(chǎn)生式左部長度是否大于右部 break; if(i=n) return true; cout該文法是一個0型文法endl; return false;bool IsSecond(WF *p,int
13、n) /判斷2型文法(左部是一個非終結(jié)符) int i; if(IsFirst(p,n) /是否是1型文法 for(i=0; i=A&pi.left0=Z) /判斷產(chǎn)生式左部長度是否為一,左部第一個是否是非終結(jié)符 break; if(i=n) return true; cout該文法是1型文法endl; return false;bool IsThird(WF *p,int n) /判斷3型文法(形如Aa,AaB的形式) int i; if(IsSecond(p,n) /是否是2型文法 for(i=0; i=3)|(pi.right0=A&pi.right0=Z) /判斷產(chǎn)生式右部字符個數(shù)是否
14、是1或者2,判斷右部第一個字符是否是非終結(jié)符 break; if(i=n) for(i=0; i=A&pi.right1=Z) break; if(i=n) cout該文法屬于3型文法endl; return true; cout該文法屬于2型文法endl; return false;int main( ) int i,j,n; string input;/*fstream myFile;myFile.open(1.txt);string q10;int j=0;int i=0;if(myFile.is_open()while(!myFile.eof()getline(myFile,qj);/coutqj+endl;ssi=qj;ss1i=qj;i+;j+;*/ while(true) cout請輸入文法產(chǎn)生式個數(shù)Nendln; WF *p=new WFn; / 初始化產(chǎn)生式數(shù)組 for(i=0; iinput; /輸入 for(j=0; jinput.length(); j+) /改變輸入數(shù)據(jù)的形式 if(inputj=-) pi.left=input.substr(0,j); pi.right=input.substr(j+2,input.length(); if(IsThir
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 組網(wǎng)技術(shù)應(yīng)用知到課后答案智慧樹章節(jié)測試答案2025年春成都工業(yè)職業(yè)技術(shù)學(xué)院
- 吉林省“五地六校”合作體2025年高三語文試題5月統(tǒng)一考試試題含解析
- 工程竣工驗(yàn)收報告土壤污染治理效果評估
- 第13課 遼宋夏金元時期的對外交流 教案2024-2025學(xué)年七年級歷史下冊新課標(biāo)
- 2025年全球半導(dǎo)體產(chǎn)業(yè)新動態(tài):關(guān)鍵數(shù)據(jù)與未來趨勢解析
- 2025年白酒行業(yè)資訊:A股市場動態(tài)與頭部企業(yè)表現(xiàn)(附關(guān)鍵數(shù)據(jù))
- 山東省德州市第二中學(xué)2024-2025學(xué)年高三上學(xué)期第四次學(xué)情檢測數(shù)學(xué)試題(解析版)
- 長沙屋面改造施工方案
- 6年級上冊25課筆記
- 2025年?duì)I銷資格考試試題及答案
- 2025年公園綠化樹木維護(hù)合同
- 2023年高考真題全國乙卷物理試卷
- 運(yùn)梁車培訓(xùn)教材
- 節(jié)后復(fù)工復(fù)產(chǎn)安全教育培訓(xùn)資料
- 軸承基礎(chǔ)知識測試
- 《體驗(yàn)微視頻拍攝樂趣》第一課時初中七年級勞動教育課件
- 主水管改造合同范例
- 《電工技術(shù)》課件-戴維南定理
- 力與運(yùn)動的關(guān)系(專題訓(xùn)練)【三大題型】(原卷版)-八年級物理下冊
- DB4205T70-2024 既有住宅加裝電梯技術(shù)規(guī)范
- 耳穴壓豆治療便秘
評論
0/150
提交評論