版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)編譯原理實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱 消除文法的左遞歸 實(shí)驗(yàn)時(shí)間 2015年5月19日 院系 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 班級(jí) 學(xué)號(hào) 姓名 實(shí)驗(yàn)?zāi)康妮斎耄喝我獾恼?guī)文法。輸出:相應(yīng)的正規(guī)式。實(shí)驗(yàn)原理3型文法(正則文法,線性文法) 如果對(duì)于某文法G,P中的每個(gè)規(guī)則具有下列形式:U : = T 或 U : = WT其中TVT;U,WVN,則稱該文法G為左線性文法。如果對(duì)于某文法G,P中的每個(gè)規(guī)則具有下列形式:U : = T 或 U : = TW其中TVT;U, WVN,則稱該文法G為右線性文
2、法。左線性文法和右線性文法通稱為3型文法或正則文法,有時(shí)又稱為有窮狀態(tài)文法,簡(jiǎn)寫為RG。按照定義,對(duì)于正則文法應(yīng)用規(guī)則時(shí),單個(gè)非終結(jié)符號(hào)只能被替換為單個(gè)終結(jié)符號(hào),或被替換為單個(gè)非終結(jié)符號(hào)加上單個(gè)終結(jié)符號(hào),或者被替換為單個(gè)終結(jié)符號(hào)加上單個(gè)非終結(jié)符號(hào)。3型文法所確定的語言為3型語言L3,3型語言可由確定的有限狀態(tài)自動(dòng)機(jī)來識(shí)別。程序設(shè)計(jì)語言的單詞可由正則文法產(chǎn)生,例如,標(biāo)識(shí)符的定義可由正則文法描述如下::=/顯然,該文法描述了以字母開頭的字母數(shù)字串的集合?,F(xiàn)在要引入另一種適合于描述單詞的表示法正則表達(dá)式。正則表達(dá)式又稱為正則式,每個(gè)正則表達(dá)式描述的集合稱為正則集。之所以采用正則表達(dá)式來描述,主要基于
3、以下幾點(diǎn)原因:詞法規(guī)則簡(jiǎn)單,無需上下文無關(guān)文法那樣嚴(yán)格的表示法,用正則式表示法來理解被定義的符號(hào)集合比理解由重寫規(guī)則集合定義的語言更為容易;從正則式構(gòu)造高效識(shí)別程序比上下文無關(guān)文法更容易;可以從某個(gè)正則式自動(dòng)地構(gòu)造識(shí)別程序,它可以識(shí)別用該正則式表示的字符串集合中的字符串,從而減輕后面要介紹的詞法分析時(shí)的工作量??捎糜谄渌鞣N信息流的處理,例如,已經(jīng)應(yīng)用于某些模式識(shí)別問題、文獻(xiàn)目錄檢索系統(tǒng)以及正文編輯程序等。正則表達(dá)式和正則集設(shè)有字母表。上的正則表達(dá)式和它所表示的正則集遞歸地定義如下:和都是上的正則表達(dá)式,它們所表示的正則集分別為和,其中是空串,是空集;任意的a是正則表達(dá)式,它所表示的正則集是a
4、;如果e1和e2是上的任意的正則表達(dá)式,且分別表示的正則集為L(zhǎng)(e1)和L(e2),則:e1/e2也是正則表達(dá)式,表示的正則集為L(zhǎng)(e1 / e2)L(e1)L(e2)。e1 e2也是正則表達(dá)式,表示的正則集為L(zhǎng)(e1 e2)L(e1)L(e2)。(e1)*也是正則表達(dá)式,表示的正則集為L(zhǎng)(e1)*)L(e1)*。定義中(1)和(2)定義了原子正則表達(dá)式,而(3)則表明字母表上的正則表達(dá)式可由原子正則表達(dá)式或較簡(jiǎn)單的正則表達(dá)式通過聯(lián)合、連接與閉包運(yùn)算構(gòu)成一般的正則表達(dá)式。正則表達(dá)式的性質(zhì)如果兩個(gè)正則表達(dá)式e1和e2表示的正則集相同,即值相等,則稱它們是等價(jià)的。記為e1e2。正則表達(dá)式與正則文法
5、的關(guān)系一個(gè)正則表達(dá)式的值是正則集,它是正則語言的另一種表示法。不難看出,除了符號(hào)外,一個(gè)正則表達(dá)式的含義類似于正則文法的一個(gè)非終結(jié)符號(hào)規(guī)則右部的含義。例如,對(duì)于 := 0/1/2/9,由非終結(jié)符數(shù)字所產(chǎn)生的字符串集合與正則表達(dá)式0/1/2/9所定義的字符串集合是相同的。正則集,它對(duì)應(yīng)一個(gè)不包含任何句子的語言,引進(jìn)的目的主要是為了理論上的完備性。3.實(shí)驗(yàn)內(nèi)容由正規(guī)(則)文法構(gòu)造正規(guī)(則)式4.實(shí)驗(yàn)心得通過實(shí)驗(yàn)明確了正規(guī)文法構(gòu)造正規(guī)式的方法,對(duì)正規(guī)式及正規(guī)文法有了進(jìn)一步的認(rèn)識(shí)欲了解 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é)符不等于右部的最后一個(gè) 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)成時(shí)停止轉(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;/如果每個(gè)產(chǎn)生式都能找到非終結(jié)符bool IsFirst(WF *p,int n) /判斷1型文法(右邊長(zhǎng)度大于等于左邊長(zhǎng)度) if(IsZero(p,n) /先判斷是否是0型文法 int i; for(i=0; ipi.right.length()&pi.right.length()!=0) /判斷產(chǎn)生式左部長(zhǎng)度是否大于右部 break; if(i=n) return true; cout該文法是一個(gè)0型文法endl; return false;bool IsSecond(WF *p,int
13、n) /判斷2型文法(左部是一個(gè)非終結(jié)符) int i; if(IsFirst(p,n) /是否是1型文法 for(i=0; i=A&pi.left0=Z) /判斷產(chǎn)生式左部長(zhǎng)度是否為一,左部第一個(gè)是否是非終結(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)生式右部字符個(gè)數(shù)是否
14、是1或者2,判斷右部第一個(gè)字符是否是非終結(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請(qǐng)輸入文法產(chǎn)生式個(gè)數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版二手房買賣配套車位使用權(quán)合同3篇
- 2024年度裝載機(jī)制造企業(yè)市場(chǎng)渠道拓展合同3篇
- 2024年版臨時(shí)工大型活動(dòng)安全保障合同
- 2024版建筑工程總包合同變更處理流程3篇
- 2024年搬家搬運(yùn)與搬運(yùn)工具租賃合同3篇
- 2024年度智能電商平臺(tái)內(nèi)容創(chuàng)作者聘用合同3篇
- 2024年幼兒園食堂食品安全合同3篇
- 2024年版餐飲業(yè)裝飾協(xié)議示范文本版B版
- 2024版二手摩托車轉(zhuǎn)讓及維修保養(yǎng)套餐合同3篇
- 2024版二手車買賣及舊車回收一體化服務(wù)合同3篇
- 山東省濟(jì)南市2023-2024學(xué)年高一上學(xué)期1月期末考試 物理 含答案
- 機(jī)器學(xué)習(xí)(山東聯(lián)盟)智慧樹知到期末考試答案章節(jié)答案2024年山東財(cái)經(jīng)大學(xué)
- 商業(yè)倫理與企業(yè)社會(huì)責(zé)任(山東財(cái)經(jīng)大學(xué))智慧樹知到期末考試答案章節(jié)答案2024年山東財(cái)經(jīng)大學(xué)
- 2024年輔警招聘考試試題庫及完整答案(全優(yōu))
- 2024年江蘇省普通高中學(xué)業(yè)水平測(cè)試小高考生物、地理、歷史、政治試卷及答案(綜合版)
- 《保健按摩師》(二級(jí))理論知識(shí)鑒定要素細(xì)目表
- 甘蔗制糖簡(jiǎn)介
- 三秦出版社五年級(jí)上冊(cè)綜合實(shí)踐教案
- 屋頂分布式光伏項(xiàng)目安全文明施工控制措施
- 水泥保證供應(yīng)實(shí)施方案及服務(wù)承諾書
- 2022機(jī)要密碼工作總結(jié)機(jī)要室工作總結(jié).doc
評(píng)論
0/150
提交評(píng)論