




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C語言小型分析器實驗報告一、實驗內(nèi)容與要求內(nèi)容:選擇部分C語言的語法成分,設(shè)計其詞法分析程序、語法語義分析程序。要求:1、選擇部分C語言的語法成分,設(shè)計其詞法分析程序、語法語義分析程序。2、設(shè)計并實現(xiàn)含多條簡單賦值語句的語法分析程序,要求有一定的出錯提示與恢復(fù)功能。3、設(shè)計并實現(xiàn)將簡單賦值語句翻譯成四元式的語法語義分析程序,要求有一定的出錯提示和恢復(fù)功能。二、設(shè)計方案1、 待分析的簡化C語言的詞法說明:詞法分析程序所輸出的單詞符號通常表示成如下的二元式:(單詞種別,單詞自身的值)1. 單詞種別單詞種別表示單詞的種類,它是語法分析需要的信息,一個語言的單詞符號如何劃分種類,分成幾個種類,怎樣編碼
2、,它主要取決于處理上的方便,通常的方法是讓每種單詞對應(yīng)一個整數(shù)碼,其目的是最大限度地把各個單詞區(qū)別開來?;咀挚蓪⑵淙w視為一種,也可以一字一種。采用一字一種的分法處理起來較為方便。標(biāo)識符一般統(tǒng)歸為一種。常數(shù)可統(tǒng)歸為一種,也可以按類型(整型、實型、布爾型等)分種。運算符和界符可采用一符一種的分法,也可以統(tǒng)一為一種。2. 單詞自身的值單詞自身的值是編譯中其他階段所需要的信息??梢圆捎靡韵聝煞N方法來確定它的值。 如果一個種別碼對應(yīng)一個單詞符號,則種別碼可以代表單詞自身。如果一個種別碼對應(yīng)多個單詞符號,則單詞自身值是單詞符號的機內(nèi)碼。 2、單詞符號的種別編碼方案:表1單詞種別碼單詞符號種別碼單詞符號
3、種別碼單詞符號種別碼main1-23;34int2*2435char3/25=37else5)27=38for628=39while729!=40Letter(letter|digit)*103001000Digitdigit*2031ERROR-1=21,32+22:333、待分析的簡化C語言的語法規(guī)則說明:程序 main()語句塊語句塊語句串語句串語句;語句語句賦值語句|條件語句|循環(huán)語句賦值語句 ID =表達式條件語句 if條件語句塊循環(huán)語句 while條件語句塊條件(表達式關(guān)系符表達式)表達式項+項|-項項因子*因子|/因子因子 ID | NUM |(表達式)關(guān)系符|4、所采用的語法分
4、析方法的算法思想和主要步驟:算法思想:語法分析程序是在詞法分析的基礎(chǔ)上,根據(jù)語法規(guī)則,從單詞符號串中識別出各種語法成分,同時進行語法檢查,檢查各種語法成分在語法結(jié)構(gòu)上的正確性。遞歸下降分析法是確定的自上而下分析法,這種分析法要求文法是(1)文法。它的基本思想是,對文法中的每個非終結(jié)符編寫一個函數(shù)(或子程序),每個函數(shù)(或子程序)的功能是識別由該非終結(jié)符所表示的語法成分。由于描述語言的文法常常是遞歸定義的,因此相應(yīng)的這組函數(shù)(或子程序)必然以相互遞歸的方式進行調(diào)用,所以將此種分析法稱為遞歸下降分析法。主要步驟:這次的綜合實驗用的是自上向下分析方法中的遞歸下降分析法,步驟如下:構(gòu)造遞歸下降分析程序
5、時,每個函數(shù)名是相應(yīng)的非終結(jié)符,函數(shù)體則是根據(jù)規(guī)則右部符號串的結(jié)構(gòu)編寫。(1)當(dāng)遇到終結(jié)符a時,則編寫語句if(當(dāng)前讀來的輸入符號a)讀下一個輸入符號。(2)當(dāng)遇到非終結(jié)符A時,則編寫語句調(diào)用A()。(3)當(dāng)遇到A規(guī)則時,則編寫語句if(當(dāng)前讀來的輸入符號FOLLOW(A))eror()。(4)當(dāng)某個非終結(jié)符的規(guī)則有多個侯選式時,按LL(1)文法的條件能唯一地選擇一個侯選式進行推導(dǎo)。5、完成語法制導(dǎo)翻譯所用的翻譯模式:本程序采用遞歸下降語法制導(dǎo)的翻譯模式。6、程序的主要算法思想和主要函數(shù)的算法思想及流程:詞法分析程序的主要算法思想算法的基本任務(wù)是從字符串表示的源程序中識別出具有獨立意義的單詞符
6、號,其基本思想是根據(jù)掃描到的單詞符號的第一個字符的種類,拼出相應(yīng)的單詞符號。置初值調(diào)用掃描子程序是否輸入串結(jié)束輸出單詞二元組結(jié)束圖1 詞法分析主程序示意圖掃描子程序的算法思想變量初始化 否是其他符號運算符,界符等符號字母數(shù)字否是返回忽略空格是否文件結(jié)束 是否關(guān)鍵字Syn為對應(yīng)關(guān)鍵字的單詞種別碼對不同符號給出相應(yīng)的syn值拼字符串拼數(shù)Syn=10Syn=11報錯返回圖2 詞法分析程序流程語法分析程序的算法思想主程序示意圖如圖3所示。置初值調(diào)用scaner讀下一個單詞符號調(diào)用lrparser結(jié)束圖3 語法分析主程序示意圖遞歸下降分析程序示意圖如圖4所示。是否否否是lrparser調(diào)用scaner調(diào)
7、用語句塊分析函數(shù)是否單詞串main()源程序是否結(jié)束打印分析成功出錯處理圖4遞歸下降分析程序示意圖語句塊分析過程示意圖如圖5所示。是否是否調(diào)用scaner調(diào)用語句串分析過程是否是否出錯處理出口圖5語句塊分析示意圖語句串分析過程示意圖如圖6所示。否是調(diào)用statement函數(shù) 調(diào)用scaner調(diào)用statement函數(shù)是否;出錯處理否圖6語句串分析示意圖statement (語句) 函數(shù)流程如圖7所示;expression(表達式)分析過程如圖8所示;term(項)分析過程如圖9所示;condition(條件)分析過程如圖10所示;factor(因子)分析過程如圖11所示。是是是是否否否是否標(biāo)識
8、符否調(diào)用scaner是否=調(diào)用scaner調(diào)用expression調(diào)用scaner調(diào)用condition調(diào)用語句塊出錯處理調(diào)用scaner調(diào)用condition調(diào)用語句塊是否ifififfifififif標(biāo)識符是否while圖7 statement函數(shù)流程調(diào)用term調(diào)用factor調(diào)用ffactor否是是否*、/調(diào)用scaner調(diào)用factor出錯處理否是是否+、-調(diào)用scaner調(diào)用term出錯處理圖8 expression分析過程示意圖 圖9 term分析過程示意圖否是調(diào)用expression是否邏輯運算符調(diào)用scaner調(diào)用expression出錯處理圖10 condition分析過程
9、示意圖否是否是是否否是是否數(shù)字調(diào)用scaner調(diào)用expression出錯處理是否標(biāo)識符是否(是否)調(diào)用scaner調(diào)用scaner圖11 factor分析過程示意圖語義分析算法思想設(shè)置語義過程int gen(op,arg1,arg2,result)該函數(shù)是將四元式(op,arg1,arg2,result)送到四元式表中。char *newtemp( )該函數(shù)回送一個新的臨時變量名,臨時變量名產(chǎn)生的順序為T1,T2,.int merg(p1,p2)該函數(shù)將以p1和p2為頭指針的兩條鏈合并為一,合并后的鏈?zhǔn)诪榉祷刂?。int bp(p,t)該函數(shù)的功能是把p所鏈接的每個四元式的第四區(qū)段都填為t。置
10、初值調(diào)用scaner調(diào)用lrparser打印四元式列表結(jié)束圖12 語義分析主程序示意圖三、測試實例1、 測試實例: main() x=12; y=4; z=(x+y)*3/x;2、測試結(jié)果:(1,main)(26,()(27,)(30,)(10,x)(21,=)(20,12)(34,;)(10,y)(21,=)(20,4)(34,;)(10,z)(21,=)(26,()(10,x)(22,+)(10,y)(27,)(24,*)(20,3)(25,/)(10,x)(34,;)(31,)(1000, )輸入程序的四元組如下所示:(1):(=,12,x)(2):(=,4,y)(3):(+,x,y,T1)(4):(*,T1,3,T2)(5):(/,T2,x,T3)(6
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度大理石石材國際貿(mào)易結(jié)算合同
- 醫(yī)院擴建抵押貸款合同樣本
- 2025年度爆破作業(yè)風(fēng)險評估與安全防護合同
- 二零二五年度保險連鎖店裝修保險責(zé)任合同
- 圖書館翻新預(yù)付款合同
- 乘除法練習(xí)題1000道提升你的計算能力
- 乘除法練習(xí)題1000道助你快速提高
- 標(biāo)準(zhǔn)版離婚合同模板
- 2025年供暖設(shè)備建設(shè)合同樣本
- 2025年勞動合同訂立與解除新規(guī)解析
- 醫(yī)療機構(gòu)依法執(zhí)業(yè)自查管理辦法
- 傳染病監(jiān)測預(yù)警與應(yīng)急指揮信息平臺建設(shè)需求
- 《個人所得稅征管問題及對策研究》
- 江蘇省中小學(xué)生金鑰匙科技競賽(初中組)考試題及答案
- 生活垃圾我知道(課件)二年級下冊勞動
- 2020-2024年五年高考歷史真題分類匯編(全國)專題14 中國古代史(非選擇題)(原卷版)
- 事業(yè)單位考試職業(yè)能力傾向測驗(醫(yī)療衛(wèi)生類E類)試卷及答案指導(dǎo)
- 每日系列-計算小紙條-3年級下冊
- JGJT46-2024《施工現(xiàn)場臨時用電安全技術(shù)標(biāo)準(zhǔn)》條文解讀
- 2024年廣西區(qū)公務(wù)員考試《行測》真題及答案解析
- 闌尾炎的護理查房腹腔鏡
評論
0/150
提交評論