freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

編譯原理課程設(shè)計(jì)報(bào)告-簡單文法的編譯器的設(shè)計(jì)與實(shí)現(xiàn)-資料下載頁

2025-06-02 00:38本頁面
  

【正文】 出口 釋放寄存器 31 有錯誤 4 程序設(shè)計(jì)與實(shí)現(xiàn) 程序的總體流程圖如下: y n 各個模塊的程序具體流程圖參考第 3節(jié)。 開始 詞法分析器 語法分析器 中間代碼產(chǎn)生器 優(yōu)化器 目標(biāo)代碼生成器 結(jié)束 錯誤輸出 32 程序說明 main(): 調(diào)用子模塊的功能 InitStack(S)。初始化一個棧結(jié)構(gòu) cifa_main()。調(diào)用詞法分析功能 yufa_main()。調(diào)用語法分析功能 output_yuyi()。輸出四元式序列 詞法分析: cifa_main(): 詞法分析 {可以生成 Token 序列及靜態(tài)符號表并輸出 } IsLetter():判斷字符是否為字母 IsDigit():判斷字符是否為數(shù)字 IsKey():判斷是否為關(guān)鍵字 IsDefinition():判斷是否為界符 InsertID():向符號表中添加標(biāo)示符(可判斷符號表之前是否已存在此標(biāo)示符) InsertConst():向符號表中添加數(shù)字( 可判斷符號表之前是否已存在此數(shù)字) 語法分析 ,及中間代碼生成: 遞歸下降子程序:判斷文法是否正確,并輸出自上而下的推導(dǎo)過程 輸出錯誤情況 插入語義動作并生成未優(yōu)化的四元式 儲存原始的四元式 33 編譯后端(四元式的優(yōu)化): DAG_Main():四元式優(yōu)化的主函數(shù) QuatBelongToNumber():判斷四元式中操作數(shù)是不是為常數(shù) Replace():替換冗余的四元式 DeleteQuat():刪除冗余的四元式 Geq():計(jì)算并優(yōu)化四元式 編譯后端(目標(biāo)代碼生成): TargetCode():生成目標(biāo)代碼 InitSEMStack():初始化信息棧 ActiveInfo():生成活躍信息表 CollectAndEdit():生成匯編代碼 output_code():輸出目標(biāo)代碼 34 實(shí)驗(yàn)結(jié)果 采用如下一段 C語言程序進(jìn)行驗(yàn)證,包含了課設(shè)要求的基本語句。這是一段正確的程序,就是符合我們定義的文法。用它來進(jìn)行程序的驗(yàn)證,各模塊輸出結(jié)果如下所示。在這里先說明一下,若待驗(yàn)證的程序沒有錯誤,那么語法分析就檢測不出錯誤,為了能檢測到錯誤,展示語法分析 的功能,就認(rèn)為的制造出錯誤,具體見下面語法分析輸出模塊。 void main(){ int a,b,c,x。 if(ab){ x=(a+b)*c。 }else { x=5a*b。 } while(c=x){ a=c+5*(3+2)。 b=a+x。 } } 35 ( 1)詞法分析器模塊輸出結(jié)果如下所示:它的輸出結(jié)果形式第一列代表所屬類型,第二列為對應(yīng)的單詞。我們的程序也可以識別出字符常量和字符串常量。因?yàn)閮?yōu)化那部分沒有涉及到這兩種常 量,所以就沒有向大家展示出來。 36 ( 2) 語法分析模塊輸出的結(jié)果如下: 因?yàn)橛脕眚?yàn)證的程序沒有錯誤,所以需要人為的添加錯誤。程序能識別的錯誤有:①能夠識別出未定義標(biāo)識符②能夠檢測出標(biāo)識符的重定義③能夠檢測出括弧的匹配與否④ if 和 while 的判斷條件不能為空⑤能夠識別出關(guān)鍵字的拼寫正確與否⑥表達(dá)式的正確與否。給出檢測程序如下: void main(){ int a,b,x。 char a。//a 重定義 if(){//if 判斷條件為空 x=(a+b)*c。 }else { x=5a*b。 } while(a=b){ a=c+5*(3+2)。 b=a+x。 d=a+b。//d 沒定義 } } 37 ( 3) 中間代碼產(chǎn)生器模塊輸出的結(jié)果如下: 用四元式序列來表示。 38 ( 4) 優(yōu)化器模塊輸出結(jié)果如下: 39 ( 5) 目標(biāo)代碼生成模塊輸出結(jié)果如下: 因?yàn)樯赡繕?biāo)代碼需要獲取相關(guān)變量的活躍度信息,所以先展示一下符號表的內(nèi)容。 40 ( 6) 可視化界面如下圖所示:各模塊要輸出的內(nèi)容在上面已經(jīng)被標(biāo)出。 41 5 結(jié)論 我們 所設(shè)計(jì)的 C語言編譯系統(tǒng)可以根據(jù)自己所定義的文法成功的進(jìn)行詞法分析,生成相應(yīng)的 Token 序列,另外,通過測試,也可以成功地生成靜態(tài)符號表,并能對靜態(tài)符號表隨時進(jìn)行查看。我們所設(shè)計(jì)的 C 語言編譯系統(tǒng)也可以成功地對文檔中的內(nèi)容采用 LL1 分析法進(jìn)行語法分析。通過測試,可以檢查出所有的錯誤,并提示出錯,但只能輸出部分與錯誤有關(guān)的信息,而不能輸出全部錯誤信息。總體來說還算成功。另外,在進(jìn)行語法分析的同時,我們通過插入語義動作可以同時生成四元式。通過測試,我們可以成功的生成所需的四元式。我們也對四元式的優(yōu)化進(jìn)行了測試,我們 可以成功地對原始的四元式進(jìn)行部分的優(yōu)化,但不能優(yōu)化至最簡,而是只能對兩個操作數(shù)皆為常數(shù),及四元式重復(fù)冗余這兩種情況進(jìn)行優(yōu)化。我們也可以成功地生成活躍信息表,并通過活躍信息表生成相應(yīng)的機(jī)器代碼。通過測試,我們所生成的機(jī)器代碼是準(zhǔn)確無誤的。 因此,整體來說,我們所設(shè)計(jì)的 C 語言編譯系統(tǒng)是成功的。但我們也有遺憾,我們所設(shè)計(jì)的符號表,單獨(dú)是可以運(yùn)行的,并沒有建立相應(yīng)的活動記錄。 42 6 參考文獻(xiàn) 陳火旺 .《程序設(shè)計(jì)語言編譯原理》(第 3版) . 北京:國防工業(yè)出版社 .2021. 美 Alfred Ravi Sethi Jeffrey D. Ullman 著 .李建中,姜守旭譯 .《 編譯原理 》 .北京:機(jī)械工業(yè)出版社 .2021. 美 Kenh 著 .馮博琴等譯 .《 編譯原理及實(shí)踐 》 .北京:機(jī)械工業(yè)出版社 .2021. 金成植著 .《 編譯程序構(gòu)造原理和實(shí)現(xiàn)技術(shù) 》 . 北京:高等教育出版社 . 2021. 43 7 收獲、體會和建議 經(jīng)過了為期 2 周的課程設(shè)計(jì),讓一開始都不知道編譯器是何物的我們成功蛻變,在完成 基本任務(wù)的基礎(chǔ)上又進(jìn)一步實(shí)現(xiàn)了編譯器后端。依稀記得剛剛接觸課程題目時,都不知道該如何下手,雖然同時也在進(jìn)行編譯理論課,但當(dāng)真正要將理論變?yōu)閷?shí)踐時,著手起來并沒有想象中的那么容易。 萬事開頭難,這句話一點(diǎn)都不錯。剛開始聽到別的同學(xué)說定義一個自己的文法,我的第一反應(yīng)是怎么可能呢?在與組員的交流中,最終我們組確定了一套類似于 C語言的文法。定義屬于自己的 C語言文法之后,發(fā)現(xiàn)自己對編譯的理解又深了一層。整個過程下來收獲還是頗多。 當(dāng)定義了屬于自己的文法之后,接下來的任務(wù)就顯得非常明了。雖然之后還遇到了很多技術(shù)性問題 ,比如之前我們對 VC的對話框和單文檔實(shí)現(xiàn)比較熟悉,多文檔很少涉及,又比如在難度較大的語法語義分析中總是出問題等等。但是這些問題都不會阻擋我們課程設(shè)計(jì)的進(jìn)行,因?yàn)槲覀儾粌H有強(qiáng)大的團(tuán)隊(duì),出現(xiàn)問題還可以即時向老師尋求幫助,而且還有各種網(wǎng)絡(luò)途徑和圖書館資源,在此非常感謝他們提供的各種幫助。 當(dāng)然我們也遇到了一些目前還沒有解決的問題,比如說在進(jìn)行 float類型的數(shù)據(jù)操作時,匯編會出現(xiàn)溢出錯誤,所以即使在語義語法上都沒有問題,我們也沒有采用這種類型。另外,對函數(shù)的操作和數(shù)組的定義都沒有去涉及。符號表的功能也不是很完善 ,基本上還是處于一種比較不完美的狀態(tài)。 本次課程設(shè)計(jì)讓大家都學(xué)到了很多。首先, VC 不再是僅僅給我們提供了編程環(huán)境,它還有許多我們以前上機(jī)課乃至實(shí)習(xí)時不曾了解的功能, 44 我們以后也將會繼續(xù)探索其更多的功能。其次,對于編譯程序的理解,我們不再停留在對詞法、語法語義分析等理論知識的了解,還掌握了編譯程序的具體實(shí)現(xiàn)。雖然我們的設(shè)計(jì)是在別人完成的基礎(chǔ)上學(xué)習(xí)的,但是這并不妨礙我們對知識和技能的掌握,我相信只有積累到足夠多的知識與經(jīng)驗(yàn),才能更好地實(shí)現(xiàn)創(chuàng)新。最后,在團(tuán)隊(duì)合作以及遇到問題后的分析處理能力也得到了很大的提高。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1