語法分析器實(shí)驗(yàn)報(bào)告_第1頁
語法分析器實(shí)驗(yàn)報(bào)告_第2頁
語法分析器實(shí)驗(yàn)報(bào)告_第3頁
語法分析器實(shí)驗(yàn)報(bào)告_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

實(shí)驗(yàn)三語法分析器一、實(shí)驗(yàn)?zāi)康模豪斫夂驼莆誏L(1)語法分析方法的基本原理;根據(jù)給出的LL(1)文法,掌握LL(1)分析表的構(gòu)造及分析過程的實(shí)現(xiàn),掌握語法分析方法和程序設(shè)計(jì)方法。二、實(shí)驗(yàn)要求:對每個(gè)非終極符按其產(chǎn)生式結(jié)構(gòu)構(gòu)造相應(yīng)語法分析子程序,其中終極符產(chǎn)生匹配命令,而非終極符則產(chǎn)生過程調(diào)用命令。因?yàn)槲姆ㄟf歸相應(yīng)子程序也遞歸,所以稱這種方法為遞歸子程序下降法或遞歸下降法。其中子程序的結(jié)構(gòu)與。產(chǎn)生式結(jié)構(gòu)幾乎是一致的,通過設(shè)計(jì)、編程、調(diào)試出一個(gè)具體語法分析程序。三、實(shí)驗(yàn)原理:語法分析是編譯過程的核心部分。它的任務(wù)是在詞法分析識別出單詞符號串的基礎(chǔ)上,分析并判定程序的語法結(jié)構(gòu)是否符合語法規(guī)則。語法分析器的工作本質(zhì)上是按文法的產(chǎn)生式,識別輸入串是否是一個(gè)句子。自上而下分析法的主旨是,對任何輸入串,試圖用一切可能的方法,從文法開始符號出發(fā),自上而下地為輸入串建立一棵語法樹。這種方法本質(zhì)上是一種試探過程,是反復(fù)使用不同產(chǎn)生式謀求匹配輸入串的過程。對于一個(gè)文法滿足以下三個(gè)條件,則稱該文法為LL(1)文法。文法不含有左遞歸。對于文法中的每一個(gè)非終結(jié)符A的各個(gè)產(chǎn)生式的侯選首符集兩兩不相交。即,若A->Q1|Q2|…|Qn則FIRST(Qi)^FIRST(Qj)=null(i!=j)對文法中的每個(gè)非終結(jié)符號A,若他存在某個(gè)侯選首符集包含空串,則FIRST(A)^FOLLOW(A)=null對于一個(gè)文法滿足LL(1)條件時(shí),我們就可以對其輸入串進(jìn)行有效的無回溯的自上而下分析程序,這個(gè)分析程序是由一組遞歸過程組成的,每個(gè)過程對應(yīng)文法的一個(gè)非終結(jié)符號。四、實(shí)驗(yàn)步驟:1、功能描述:根據(jù)給定的文法,由程序生成項(xiàng)集族和語法分析表,對輸入的源程序進(jìn)行詞法分析,得到語法分析的輸入串,經(jīng)過語法分析后得到三個(gè)棧,它們分別是狀態(tài)棧,字符棧,輸入棧,從而分析出輸入的源程序是否有語法錯(cuò)誤。2、構(gòu)造自己設(shè)計(jì)的小語言的語法分析器:(1)語言的語法描述(語法規(guī)則)的設(shè)計(jì)即文法的設(shè)計(jì);(2)把文法形式符號中所隱含的信息內(nèi)容挖掘出來并用LL或LR的資料形式(分析表)表示出來;(3)語法分析的數(shù)據(jù)輸入形式和輸出形式的確定;(4)語法分析程序各個(gè)模塊的設(shè)計(jì)與調(diào)試。3、主程序流程圖:開始開始定義各個(gè)數(shù)據(jù)結(jié)構(gòu)定義find(),first(),closure(),mygoto(),sign(),items(),reloatoken()函數(shù)main()函數(shù)開始從“in_gram.txt”文件中讀入文法;計(jì)算產(chǎn)生式的個(gè)數(shù)調(diào)用sign()提取文法符號序列調(diào)用item()分析項(xiàng)集簇輸出各狀態(tài)自動(dòng)機(jī),即項(xiàng)集簇輸出語法分析表首行根據(jù)anatab[i][j]的數(shù)值填寫分析表從“in_code.txt”讀入待分析代碼調(diào)用reload()進(jìn)行詞法分析把詞法分析的結(jié)果寫入“in_out.txt”從“in_out.txt”讀入詞法分析結(jié)果語法分析,把分析過程棧的狀態(tài)輸出結(jié)束五、程序的設(shè)計(jì)與實(shí)現(xiàn):1、主要函數(shù)說明:1)find(state&unclosure,intn)函數(shù):功能:判斷是否已包含某一產(chǎn)生式。在求閉包c(diǎn)losure()函數(shù)中對其進(jìn)行調(diào)用;參數(shù)說明:unclosure還沒有求閉包的狀態(tài);n表示第幾個(gè)產(chǎn)生式;2)first(chartmp)函數(shù):求各文法符號的first集,確定搜索符時(shí)使用到。在求閉包的函數(shù)中隊(duì)其進(jìn)行調(diào)用;參數(shù)說明:tmp為需要求first集的文法符號;3)sign()函數(shù):功能:提取文法符號序列,將所有的文法符號+’$’都存放在一個(gè)一維數(shù)組中,該數(shù)組在輸出分析表及語法分析中對棧進(jìn)行處理時(shí)是需要使用;4)reloadtoken()函數(shù):功能:詞法分析的結(jié)果。從文件中讀入字符到buff中,將得到的單詞定義成相應(yīng)的運(yùn)算符、分隔符,關(guān)鍵字k,標(biāo)識符i,實(shí)數(shù)f',整數(shù)n;寫入到out_in.txt文件中,該文件為詞法分析的輸出,語法分析的輸入;5)voiditems(coll&head)函數(shù):功能:求LR(1)項(xiàng)目集族;6)voidclosure(state&unclosure)函數(shù):功能:求LR(1)項(xiàng)目集族的閉包;7)statemygoto(conststate&cur,intk,inttmp)函數(shù):功能:寫分析表anatab[][],使用數(shù)字,空白用0,S移入為負(fù)數(shù),r規(guī)約為正數(shù),-32767表示acc接受。六、實(shí)驗(yàn)結(jié)果(1)輸入一個(gè)文法(2)輸入一個(gè)符號串七、實(shí)驗(yàn)結(jié)果分析:本次實(shí)驗(yàn)借助語法分析,設(shè)計(jì)一個(gè)表達(dá)式的判斷分析器,從鍵盤上輸入算術(shù)表達(dá)式,分析器對該表達(dá)式的正確與否進(jìn)行分析。若是正確的算術(shù)表達(dá)式,則符合文法,輸出正確;若是錯(cuò)誤的算術(shù)表達(dá)式,則表達(dá)式不符合文法,輸出其錯(cuò)誤之處并顯示異常。該程序執(zhí)行過程無誤,輸出結(jié)果正常。但由于我們的疏忽,該程序未能完全滿足實(shí)驗(yàn)要求,并不能夠構(gòu)造其LR分析表,并不是由該分析表驅(qū)動(dòng)的語法分析器程序,這是本次實(shí)驗(yàn)的一個(gè)缺陷。八、實(shí)驗(yàn)總結(jié):此次實(shí)驗(yàn),讓我對編譯原理的基本知識有了深入的了解,加強(qiáng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論