編譯原理 遞歸下降詞法分析_第1頁
編譯原理 遞歸下降詞法分析_第2頁
編譯原理 遞歸下降詞法分析_第3頁
編譯原理 遞歸下降詞法分析_第4頁
編譯原理 遞歸下降詞法分析_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、編譯原理實驗報告 遞歸下降分析法程序 實驗2.1 遞歸下降分析法 一、實驗?zāi)康?. 根據(jù)某一文法編制遞歸下降分析程序,以便對任意輸入的符號串進(jìn)行分析。2. 本次實驗的目的是加深對遞歸下降分析法的理解。二、實驗平臺Windows + VC+6.0范例程序: “遞歸下降分析法.cpp ”三、實驗內(nèi)容對下列文法,用遞歸下降分析法對任意輸入的符號串進(jìn)行分析: (1)ETG(2)G+TG|-TG(3)G(4)TFS(5)S*FS|/FS(6)S(7)F(E)(8)Fi1.程序功能:輸入: 一個以 # 結(jié)束的符號串(包括 + - * / ( )i # ):例如:i+i*i-i/i# 輸出:(1) 詳細(xì)的分

2、析步驟, 每一步使用的產(chǎn)生式、已分析過的串、當(dāng)前分析字符、剩余串, 第一步, 產(chǎn)生式E-TG的第一個為非終結(jié)字符,所以不輸出分析串,此時分析字符為i,剩余字符i+i*i-i/i#;第二步,由第一步的E-TG的第一個為非終結(jié)字符T,可進(jìn)行對產(chǎn)生式T-FS分析,此時第一個仍為非終結(jié)字符F,所以不輸出分析串,分析字符仍為i, 剩余字符i+i*i-i/i#;第三步,使用產(chǎn)生式F-i,此時的分析串為i,,分析字符為i,匹配成功,剩余字符串+i*i-i/i#;第四步,因為使用了產(chǎn)生式 T-FS,F(xiàn)-i,第一個字符i匹配成功,接著分析字符+,使用產(chǎn)生式S-,進(jìn)行下步;第五步,使用產(chǎn)生式G-+TG,此時的分析

3、串包含i+,分析字符為+,剩余字符串+i*i-i/i#;第六步,重復(fù)對產(chǎn)生式T-FS,F(xiàn)-i的使用,對第二個i進(jìn)行匹配,此時分析串i+i,分析字符為i,剩余串*i-i/i#;第七步,分析字符*,使用產(chǎn)生式S-*FS, 分析串i+i*,剩余串i-i/i#;第八步,字符*匹配成功后,使用產(chǎn)生式F-i,匹配第三個字符i,,此時剩余串-i/i#;第九步,分析字符-,只有產(chǎn)生式G-TG可以產(chǎn)生字符-。所以要先使S-,才可使用G-TG,進(jìn)行匹配,此時的分析串為i+i*I,剩余串-i/i#;第十步,使用G-TG,字符-匹配成功,接著重復(fù)對產(chǎn)生式T-FS,F(xiàn)-i的使用,對第四個i進(jìn)行匹配,此時分析串i+i*i

4、-i,分析字符為i,剩余串/i#;第十一步,分析字符/,使用產(chǎn)生式S-/FS,接著使用F-i,對第五個i匹配,此時分析串i+i*i-i/i,剩余串#;第十二步,最后是#,說明后面字符匹配皆為空,所以要用到S-, G-結(jié)束。結(jié)果顯示如下圖:(2) 分析結(jié)果:accept (3) 推導(dǎo)序列:E=TG=FSG=iSG=iG=i+TG =i+FSG=i+iSG=i+i*FSG=i+i*iSG =i+i*iG=i+i*i-TG=i+i*i-FSG= i+i*i-iSG = i+i*i-i/FSG= i+i*i-i/iSG= i+i*i-i/iG = i+i*i-i/i2.語法樹結(jié)構(gòu):E T G F S

5、+ T G i F S - T G i * F S F S / F S i i i 3.功能的完善:(1)原來示例程序只能完成 + 、* 、(、)的語法分析, 現(xiàn)在加入 - 和 / 的語法分析。(2)將示例程序輸出的推導(dǎo)序列中的推導(dǎo)符號由 = 改為 =。(3)如果遇到錯誤的表達(dá)式,程序可輸出錯誤提示信息.輸入字符串后首先對它進(jìn)行判斷是否有非法字符,若有則提示“有非法字符”部分代碼:printf(請輸入字符串(長度aHH-aMdH-dM-AbM-A-aMA-e(1)程序代碼:aa.cpp的文件(2)輸入: 一個以 # 結(jié)束的符號串:例如: aadb#(3)輸出:步驟:第一步,首先判斷是否有非法字

6、符,如有則提示“輸入非法字符”,若無則進(jìn)行字符串分析;第二步,將# S 進(jìn)分析棧 即分析從S開始,S為開始符,首先使用產(chǎn)生式S-aH,分析串a(chǎn),分析字符為a,剩余字符串a(chǎn)db#,第三步,分析第二個字符a,對S-aH中的非終結(jié)符H進(jìn)行分析,使用H-aMd,字符a匹配成功,剩余字符串db#;第四步,使用產(chǎn)生式M-,字符d匹配成功,剩余字符串b#;第五步,分析到棧底,代表分析成功最后以#結(jié)束。非法輸入提示錯誤:(4)步驟分析棧剩余字符串使用產(chǎn)生式或匹配1#Saadb#S-aH2#Haaadb#a匹配成功3#Hadb#H-aMd4#dMaadb#a匹配成功5#dMdb#M-6#ddb#d匹配成功7#b#分析成功四心得體會通過這次試驗,我們對LL(1)有了更深的理解,更加理解LL(1)文法的分析過程及實現(xiàn)

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論