版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上仲愷農(nóng)業(yè)技術(shù)學(xué)院編譯原理課程設(shè)計課程設(shè)計題目 :LL(1)遞歸下降分析器姓 名 :院(系) : 專業(yè)班級 :學(xué) 號 : 指導(dǎo)教師 : 設(shè)計日期 :專心-專注-專業(yè)目 錄12389910題目:LL(1)遞歸下降分析器1、需求分析語法分析是編譯過程的核心部分。語法分析器的任務(wù)是識別和處理比單詞更大的語法單位。如:程序設(shè)計語言中的表達式,各種說明和語句乃至全部源程序,指出其中的語法錯誤;必要時,可生成內(nèi)部形式,便于下一階段處理。我們知道,語言的語法結(jié)構(gòu)是用上下文無關(guān)文法描述的。按照語法分析樹的建立方法,我們可以粗略地把語法分析辦法分成兩類,一類是自上而下分析,另一類是自下而
2、上分析法。而自上而下這種方法是帶“回溯”的,且存在許多困難和缺點。首先,是文法的左遞歸性問題。一個文法是含有左遞歸的,如果存在非終結(jié)符P且,含有左遞歸的文法使上述的自上而下的分析過程陷入無限循環(huán)。即,當(dāng)試圖用P去匹配輸入串時,我們會發(fā)現(xiàn),在沒有識別任何輸入符號的情況下,有得重新要求P去進行新的匹配。因此,使用自上而下分析法必須消除文法的左遞歸性。其次,由于回溯,就碰到一大堆麻煩問題。如果我們走了一大段錯路,最后必須回頭,那么,就應(yīng)把已經(jīng)做的一大堆語義工作(指中間代碼產(chǎn)生工作和各種表格的簿記工作)推倒重來。這些事情既麻煩又費時間,所以,最好應(yīng)設(shè)法消除回溯。第三,在自上而下分析過程中,當(dāng)一個非終結(jié)
3、符用某一候選匹配成功時,這種成功可能僅是暫時的。第四,當(dāng)最終報告分析不成功時,我們難于知道輸入串中出錯的確切位置。最后,由于帶回溯的自上而下分析實際上采用了一種窮盡一切可能的試探法,因此,效率很低,代價極高。嚴(yán)重的低效使得這種分析法只有理論意義,而在實踐上價值不大。由于上述原因,我們需要把原算術(shù)表達式改寫為LL(1)文法,LL(1)文法的文法條件如下:文法不含左遞歸。對于文法中每一個非終結(jié)符A的各個產(chǎn)生式的候選首集符兩兩不相交。即,若,則 對文法中的每個非終結(jié)符A,若它存在某個候選首符集包含,則LL(1)中的第一個L表示從左到右掃描輸入串,第二個L表示最左推導(dǎo),1表示分析時每一步只需向前查看一
4、個符號。當(dāng)一個文法滿足LL(1)條件時,我們就可以為它構(gòu)造一個不帶回溯的自上而下分析程序,這個分析程序是由一組遞歸過程組成的,每個過程對應(yīng)文法的一個非終結(jié)符。這樣的一個分析程序稱為遞歸下降分析器。2、概要設(shè)計編程實現(xiàn)給定算術(shù)表達式的遞歸下降分析器。算術(shù)表達式文法如下: E->E+T|E-T|TT->T*F|T/F|FF->(E)| i首先改寫文法為LL(1)文法;然后為每一個非終結(jié)符,構(gòu)造相應(yīng)的遞歸過程,過程的名字表示規(guī)則左部的非終結(jié)符;過程體按規(guī)則右部符號串的順序編寫。上述算法表達式文法屬于比較典型的遞歸下降語法分析。需要先將原算術(shù)表達式方法改寫為LL(1)文法為:E-&g
5、t;TEE->+TE|-TE| T->FTT->*FT|/FT| F->(E)| i然后再為每個非終結(jié)符設(shè)計一個對應(yīng)的函數(shù),通過各函數(shù)之間的遞歸調(diào)用從而實現(xiàn)遞歸下降語法分析的功能。具體方法為:(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) error()(4)當(dāng)某個非終結(jié)符的規(guī)則有多個候選式時,按LL(1)文法的條件能唯一地選擇一個候選式進行推導(dǎo).遞歸下降子程序流程圖:圖1遞歸下降子程序流程圖3、詳
6、細設(shè)計#include<iostream.h>char inputstream50; /存儲輸入句子int temp=0; /數(shù)組下標(biāo)int right; /判斷輸出信息void e();void e1();void t();void t1();void f();void main()right=1;cout<<"-"<<endl;cout<<"請輸入您要分析的字符串以#結(jié)束(為空字符):"<<endl;cin>>inputstream;cout<<"-&quo
7、t;<<endl;cout<<endl;cout<<"開始進行語法分析"<<endl;e();if(inputstreamtemp='#')&&right)cout<<"分析成功"<<endl;elsecout<<"分析失敗"<<endl;void e()cout<<"E->TE'"<<endl;t();e1();void e1()if(inputst
8、reamtemp='+')cout<<"E'->+TE'"<<endl;temp+;t();e1();else if(inputstreamtemp='-')cout<<"E'->-TE'"<<endl;temp+;t();e1();else if(inputstreamtemp!='#'|inputstreamtemp!=')')cout<<"T'->"
9、<<endl;return;elseright=0;void t()cout<<"T->FT'"<<endl;f();t1();void t1()if(inputstreamtemp='*')cout<<"T'->*FT'"<<endl;temp+;f();t1();else if(inputstreamtemp='/')cout<<"T'->/FT'"<<end
10、l;temp+;f();t1();else if(inputstreamtemp!='#'&&inputstreamtemp!=')'&&inputstreamtemp!='+'&&inputstreamtemp!='-')cout<<"T'->"<<endl;right=0;void f()if(inputstreamtemp='i')cout<<"F->i"<&l
11、t;endl;temp+;elseif(inputstreamtemp='(')cout<<"F->(E)"<<endl;temp+;e();if(inputstreamtemp=')')cout<<"F->(E)"<<endl;temp+;elseright=0;else right=0;4、測試分析圖2 測試分析成功圖3 測試分析失敗5、用戶手冊開發(fā)工具:visual c+ 6.0開發(fā)環(huán)境:windows XP操作系統(tǒng)運行環(huán)境:windows 9x,windo
12、ws NT,Windows 2000,windows XP注意:輸入時,程序最多只能接受50個字符,輸入完算術(shù)表達式后要以“#”號結(jié)束。6、課程總結(jié)通過一個星期的努力,終于把編譯原理課程設(shè)計給完成了。我覺得編譯原理這門課是一門非常難學(xué)的課程,它涉及文法、詞法分析、語法分析屬性文法和語義分析等等一系列內(nèi)容,課本里的內(nèi)容和定義也非常的抽象且枯燥。如果上課沒有好好的認(rèn)真聽課,自己獨自學(xué)習(xí)就感到非常的吃力,而且效果也不好。本人因為上課無法做到打醒十二分專心聽課,經(jīng)常會分神,所以學(xué)習(xí)的效果也不怎么好。這也給做編譯原理課程設(shè)計帶來了困難。本次課程設(shè)計,我選的課程設(shè)計題目是LL(1)遞歸下降分析器,這個題目
13、涉及的內(nèi)容有關(guān)課本第四章 語法分析自上而下分析里面的內(nèi)容。在開始動手對題目進行設(shè)計和編程之前,我重復(fù)的仔細認(rèn)真的閱讀和理解課本第四章里面的內(nèi)容,弄懂自上而下分析面臨的問題、何謂左遞歸,搞清楚如何消除左遞歸、如何消除回溯、提左因子,理解構(gòu)造LL(1)文件需要什么條件。雖然這花費了一定的時間和精力,但那點付出也是值得的,通過復(fù)習(xí)讓我加深理解了有關(guān)自上而下語法分析的內(nèi)容,而且也為用高級語言實現(xiàn)遞歸下降分析器帶來便利。在用C+編程時,基本上沒有遇到什么困難,只需把所有遞歸過程都寫出就行了。但是要注意的是,在編寫代碼時,要根據(jù)LL(1)文法的工作原理去設(shè)計。通過本次課程設(shè)計清楚地了解到遞歸下降分析法的優(yōu)缺點,其優(yōu)點是簡單、直觀,易于構(gòu)造分析程序。缺點是對文法要求高,必須是LL(1)文法,同時由于遞歸調(diào)用較多,影響分析器的效率。課程設(shè)計雖然只有短短的一周,但讓我認(rèn)識到學(xué)習(xí)好編譯原理,是對程序設(shè)計和編譯的一個很好的進化橋梁和奠基石。今后學(xué)習(xí)的日子還很長,希望通過這次編譯原理的課程設(shè)計,不僅對編程語言的進一步復(fù)習(xí),還是對更深層次的學(xué)習(xí)作一個簡單的準(zhǔn)備。編程的能力不是一朝一夕能鍛煉出來,堅持學(xué)習(xí),堅持編程的學(xué)習(xí),多看,多編是最好的學(xué)習(xí)和提高方法。通過本次編譯原理課
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度集合大合集【職員管理】十篇
- 《淋巴結(jié)斷層解剖》課件
- 單位管理制度分享合集人事管理
- 單位管理制度呈現(xiàn)匯編員工管理
- 《石英鐘表》課件
- 寒假自習(xí)課 25春初中地理八年級下冊人教版教學(xué)課件 第七章 第三節(jié)“東方明珠”-香港和澳門
- 《通信供電系統(tǒng)》課程標(biāo)準(zhǔn)
- 2016年高考語文試卷(新課標(biāo)Ⅲ卷)(解析卷)
- 寵物用品設(shè)計師的寵物舒適度與美觀性
- 2023迎新年國旗下演講稿400字(7篇)
- (八省聯(lián)考)河南省2025年高考綜合改革適應(yīng)性演練 化學(xué)試卷(含答案)
- 2025中國電信山東青島分公司校園招聘高頻重點提升(共500題)附帶答案詳解
- 2025年八省聯(lián)考高考語文作文真題及參考范文
- 新課標(biāo)(水平三)體育與健康《籃球》大單元教學(xué)計劃及配套教案(18課時)
- 開題報告-鑄牢中華民族共同體意識的學(xué)校教育研究
- 計件工勞務(wù)合同范例
- 2024年公交車開通儀式講話例文(4篇)
- 2024-2025學(xué)年八年級上冊物理 第五章 透鏡以及其應(yīng)用 測試卷(含答案)
- 《中華人民共和國政府采購法》專題培訓(xùn)
- 《自理理論orem》課件
- 2024年浙江省杭州市下城區(qū)教育局所屬事業(yè)單位招聘學(xué)科拔尖人才10人歷年管理單位遴選500模擬題附帶答案詳解
評論
0/150
提交評論