




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rè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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能家居技術(shù)合作補充協(xié)議
- 電商倉儲物流安全責(zé)任與風(fēng)險評估協(xié)議
- 虛擬偶像虛擬形象版權(quán)交易與授權(quán)合同
- 氫燃料電池產(chǎn)品壽命測試員聘用合同
- 網(wǎng)絡(luò)平臺內(nèi)容監(jiān)控算法授權(quán)租賃及效果評估合同
- 幼兒園教師全職聘用合同(園本課程研發(fā))
- 寵物醫(yī)療中心獸醫(yī)助理專業(yè)技術(shù)合作合同
- 交通安全標(biāo)志維護補充協(xié)議
- 孤兒撫養(yǎng)費銀行賬戶監(jiān)管與監(jiān)護權(quán)變更服務(wù)合同
- 購物中心品牌專柜租賃及管理服務(wù)合同
- 數(shù)字貿(mào)易學(xué) 課件 第18、19章 全球數(shù)字經(jīng)濟治理概述、包容性發(fā)展與全球數(shù)字鴻溝
- DLT 866-2015 電流互感器和電壓互感器選擇及計算規(guī)程解讀
- 房屋抵押個人借款標(biāo)準(zhǔn)合同
- 云南省昆明市2022-2023學(xué)年二年級下學(xué)期語文期中試卷(含答案)
- 口腔預(yù)防保健課件 英文
- 讀后續(xù)寫-制作稻草人(T8聯(lián)考)課件-高考英語作文復(fù)習(xí)專項
- 研發(fā)成果商業(yè)化轉(zhuǎn)化(資料)
- 高速鐵路關(guān)鍵技術(shù)
- 丁麗娟《數(shù)值計算方法》五章課后實驗題答案(源程序很詳細(xì)-且運行無誤)
- 情境學(xué)習(xí)理論在教育中的應(yīng)用
- 血糖監(jiān)測操作流程及考核標(biāo)準(zhǔn)(100分)
評論
0/150
提交評論