版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
編譯原理試驗指導書合肥學院計算機科學與技術系試驗一詞法分析程序后跳過錯誤部分接著顯示)詞法分析器的功能是輸入源程序,輸出單詞符號。詞法分析<下劃線><字母數(shù)字串>|e<數(shù)字串>-><數(shù)字><數(shù)字串>|e單詞種別碼為1。其他的都識別為標識符;單詞種別碼為2。常數(shù)為無符號整形數(shù);單詞種別碼為3。運算符包括:+、-、*、/、=、>、<、>=、<=、!=;單詞種別碼為4。分隔符包括:,、;、{、}、(、);單詞種別碼為5。以上為參考,具體可自行增刪。試驗二遞歸子程序方法依據(jù)某一文法編制調試遞歸下降分析程序,以便對隨意輸入的4、改造文法:消退二義性、消退左遞歸、提取左因子,推斷是否為LL(1)為G的每個非終結符號U構造一個遞歸過程,不妨命名為U。(1)對于每個非終結符號U->ul|u2|…|unif(ch可能是ul字的開頭)處理ul的程序部分;elseif(ch可能是u2字的開頭)處理u2的程序部分;(3)假如右部為空,則不處理。(4)對于右部中的每個符號xi①假如xi為終結符號:{NextChar();②假如xi為非終結符號,干脆調用相應的過程xi()(一)打算:(二)上課上機:(三)程序要求:輸出的格式如下:(1)遞歸下降分析程序,編制人:姓名,學號,班級(2)輸入一以#結束的符號串(包括+—*/()i#):在此位置輸入符號串例如備注:輸入一符號串如i+i*#,要求輸出為“非法的符號串”。引用也要變更。留1.表達式中允許運用運算符(+-*/)、分割符(括號)、字符I,結束符#;2.假如遇到錯誤的表達式,應輸出錯誤提示信息(該信息越具體越好);3.對學有余力的同學,可以具體的輸出推導的過程,即具體列出每一步運用的產(chǎn)依據(jù)某一文法編制調試LL(1)分析程序,以便對隨意輸入的符號串進行分析。加深對預2.初始化:設立LL(1)分析表、初始化變量空間(包括堆棧、結構體、數(shù)組、臨時變量等);4.利用LL(1)分析算法進行表達式處理:依據(jù)LL(1)分析表對表達式符號串進行堆棧(或其他)操作,輸出分析結果,假如遇到錯誤則顯示錯誤信息。1.LL(1)分析法的功能LL(1)分析法的功能是利用LL(1)限制程序依據(jù)顯示棧棧頂內容、向前看符號以及LL(1)分析表,對輸入符號串自上而下的分析過程。改造文法:消退二義性、消退左遞歸、提取左因子,推斷是否為LL(1)文法,3.LL(1)分析法試驗設計思想(二)上課上機:(三)程序要求:對下列文法,用LL(1)分析法對隨意輸入的符號串進行分析:(2)輸入一以#結束的符號串(包括+—*/()i#):在此位置輸入符號串EQ\*jc3\*hps4\o\al(\s\up4(),)寫明匹配的終結符;如分析異樣出錯則寫為“分析出錯”;若勝利結束則寫為“分析1.表達式中允許運用運算符(+-*/)、分割符(括號)、字符i,結束符#;2.假如遇到錯誤的表達式,應輸出錯誤提示信息(該信息越具體越好);1.算術表達式的文法可以是(你可以依據(jù)須要適當變更):[3]將此運算符θ1與OPTR棧頂元素02進行比較,即查上表,若θ1>02,則:01若θ1=02,如θ1為;,則分析勝利,否則OPTR棧頂元素出棧,并轉[2]t,進行運算r=atb(t為運算符),并將結果r存入棧OPND后轉[3]。若θ1和02之間無優(yōu)先關系,則報錯。程序思路(僅供參考):2.模塊結構:(1)初始化:設立算符優(yōu)先關系表(或優(yōu)先函數(shù))、初始化變量空間(包括堆棧、結構體、數(shù)組、臨時變量等);(2)限制部分:將一個表達式從文件中讀出;(3)詞法分析:將表達式分割成單詞序列;(4)利用算符優(yōu)先文法進行表達式處理:依據(jù)算符優(yōu)先關系表(或優(yōu)先函數(shù))對表達式單詞序列進行堆棧(或其他)操作,得到并保存四元組,如參考C語言的運算符。輸入如下表達式(以分號為結束)和輸出結果:留意:1.為降低難度,表達式中不含變量(只含無符號整數(shù));2.假如遇到錯誤的表達式,應輸出錯誤提示信息(該信息越具體越好);浮點表示,但要留意不要被0除。構造LR(1)分析程序,利用它進行語法分析,推斷給出的符號串是否為該文法識別的句子,了解LR(K)分析方法是嚴格的從左向右掃描,和自底向上的語法分析方法。2.初始化:設立LR(1)分析表、初始化變量空間(包括堆棧、結構體、數(shù)組、臨時變量等);4.利用LR(1)分析算法進行表達式處理:依據(jù)LR(1)分析表對表達式符號串進行堆棧(或其他)操作,輸出分析結果,假如遇到錯誤則顯示錯誤信息。析表將不同,分析表又可以分為動作表(ACTION)和狀態(tài)轉換(GOTO)表兩個部分,它們都輸入緩沖區(qū)輸入緩沖區(qū)介LR總控程序序列規(guī)定當棧頂狀態(tài)為i,遇到當前文法符號為X時應轉向狀態(tài)j,X為終結符或非終結符。ACTION[i,a]規(guī)定了棧頂狀態(tài)為i時遇到輸入符號a應執(zhí)行。動作有四種可能:(1)移進:action[i,a]=Sj:狀態(tài)j移入到狀態(tài)棧,把a移入到文法符號棧,其中i,j中有A->B的產(chǎn)生式,若B的長度為R(即|B|=R),則從狀態(tài)棧和文法符號棧中自頂向下去掉R個符號,即棧指針SP減去R,并把A移入文法符號棧內,j=GOTO[i,A]移進狀態(tài)(3)接受acc:當歸約到文法符號棧中只剩文法的起先符號S時,并且輸入符號串已結束即(一)打算:(二)上課上機:留意:1.表達式中允許運用運算符(+-*/)、分割符(括號)、字符i,結束符#;4.利用算符優(yōu)先分析算法進行表達式處理:依據(jù)算符優(yōu)先分析表對表達式符號串進行堆棧(或其他)操作,輸出分析結果,假如遇到錯誤則顯示錯誤信息。(一)打算:(三)程序要求:(4)逆波蘭式28&68+2*計算結果為192備注:(1)在生成的逆波蘭式中假如兩個數(shù)相連則用&分隔,如28和68,中間用&分隔;留意:1.表達式中允許運用運算符(+-*/)、分割符(括號)、數(shù)字,結束符#;2.假如遇到錯誤的表達式,應輸出錯誤提示信息(該信息越具體越好);(一)選題:通過平常積累,找到適合于自己的應用或某種軟件功能,該應用能利用編譯原(二)分析:選好題目后,分析該題目的應用性,可用到編譯原理的哪些理論?對它們進行軟件供應哪些功能?軟件有什么用?界面怎樣?怎樣運用該軟件?對輸入數(shù)據(jù)的格式有什么要求?用什么語言開發(fā)?怎樣測試該軟件?該軟件開發(fā)的進度如何支配?寫出(三)設計:對軟件劃分功能模塊,將模塊細化,設計出數(shù)據(jù)存放格式,寫出各模塊((四)上機(修改設計/編碼/調試/測試):(五)留意事項:期的是否相吻合(假如不吻合,實際輸出什么?可能錯誤的緣由?檢查源代碼或設計進行查(六)上交:1.程序源代碼(打包上傳,文件名中包含姓名);2.一組較完備的測試數(shù)據(jù)(存在一個文本文件中上傳);附試驗報告范例2、依據(jù)已建構的模塊,寫出各個模塊的相應程序代碼chargetsym()//從緩沖區(qū)中取一個單詞boolflag=false;/intk=-1;//表示取出的字符放在單CType='0';//預先定義的取出的單詞的類型Lasttype='0';//初始化從前的類型,此變量為推斷正負數(shù)用while(ch<=32&if(ch>='a'&&ch<='z'||ch>='A'&&ch<='{while(true)//取出的單詞長度不超過WMaxlen,假如超過,則其后的字符無效{if((++k)<WMaxlen)//(++k)為了使取出的單詞最長為Maxlen{束if(!(ch>='a'&&ch<='z'||for(inti=0;i<KEY_No;i++)//用來推斷取出的當前單詞是不是關鍵詞if(strcmp(Word,KEY[i])==0){if(flag)CType='1';//假如是關鍵詞,則把此單詞的類型定義為1型elseCType=’2';//否則是標識符,其類型為2}elseif(ch>='0'&&ch<='9')//{while(true)//假如是數(shù)字,則一干脆受,且定義它的類型為3{else{CType='3';break;}//不是數(shù)字則跳出循環(huán)//假如以字母開頭,且長度不超過WMaxlen,且下面跟有字母,則此整數(shù)非法,輸出類型為8,在主程序中輸出出錯信息{//取這個非法整數(shù)的單詞,其中可包含英文字母和數(shù)字while(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z'||ch}if(k>WMaxlen)//假如長度大于取出單詞定義的最大長度,則返回類型為8,在主程序中打出出錯信息elseCType=Errtype;//否則返回類型7,在主程序出錯,并明確寫出此單詞的具體內容elseif(ch=='+'||ch=='-'||ch=='*'||ch=='/')//取出是運算符號的單詞{if(ch=='+'||ch=='-')//假如是+號或者是-號,則還要推斷是不是正負數(shù)if(Lasttype=='6')//推斷其取出的當前字母的前一個單詞是6號類型的,即是<、>、{CType='3';//假如正負整數(shù),則干脆返回類型為3,則表示此單詞為整數(shù)型為4elseif(ch=='>'||ch=='<'||ch=='='||ch=='!’)//取出運算符的另幾類,即<、{Word[++k]=ch;Fbuffer=scanfor(inti=if(strcmp(Sign[i],Word)==0)}elseif(ch==',’||ch==';'||ch=='{'||ch=='}'||ch=='('||ch==')')//
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025買賣合同范本(宅基地)
- 科技賦能下的寵物托兒所財務風險識別與防范
- 課題申報參考:量子信息產(chǎn)業(yè)勞動力教育需求調查與教育資源開發(fā)
- 課題申報參考:勞動力流動、代際居住分離與農(nóng)村養(yǎng)老服務整合研究
- 知識經(jīng)濟時代的終身學習與發(fā)展
- 2025年華師大新版七年級生物下冊月考試卷含答案
- 2025年湘教新版九年級歷史下冊階段測試試卷含答案
- 2025年浙教版必修1歷史下冊月考試卷
- 2025年人教A新版七年級科學下冊階段測試試卷含答案
- 2025年蘇教新版九年級歷史下冊月考試卷
- 【語文】第23課《“蛟龍”探?!氛n件 2024-2025學年統(tǒng)編版語文七年級下冊
- 加強教師隊伍建設教師領域學習二十屆三中全會精神專題課
- 2024-2025學年人教版數(shù)學七年級上冊期末復習卷(含答案)
- 2024年決戰(zhàn)行測5000題言語理解與表達(培優(yōu)b卷)
- 四年級數(shù)學上冊人教版24秋《小學學霸單元期末標準卷》考前專項沖刺訓練
- 2025年慢性阻塞性肺疾病全球創(chuàng)議GOLD指南修訂解讀課件
- (完整版)減數(shù)分裂課件
- 銀行辦公大樓物業(yè)服務投標方案投標文件(技術方案)
- 第01講 直線的方程(九大題型)(練習)
- 微粒貸逾期還款協(xié)議書范本
- 人教版七年級上冊數(shù)學全冊課時練習帶答案
評論
0/150
提交評論