




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、編譯原理語法分析實驗報告軟工082班蘭潔2一、實驗內容二、實驗目的三、實驗要求四、程序流程圖主函數(shù);scanner。;irparser()函數(shù)yucu()/*語句串分析*/statement。/*語句分析函數(shù)*/expression。/*表達式分析函數(shù)*/term()/*項分析函數(shù)*/factor。/*因子分析函數(shù)*/五、程序代碼六、測試用例七、輸出結果八、實驗心得、實驗內容:編寫為一上下文無關文法構造其遞歸下降語法分析程序,并對任給的一個輸入串進行語法分析檢查。程序要求能對輸入串進行遞歸下降語法分析,能判別程序是否符合已知的語法規(guī)則,如果不符合(編譯出錯),則輸出錯誤信息。二、實驗目的:構造
2、文法的語法分析程序,要求采用遞歸下降語法分析方法對輸入的字符串進行語法分析,實現(xiàn)對詞法分析程序所提供的單詞序列的語法檢查和結構分析,進一步掌握遞歸下降的語法分析方法。三、實驗要求:利用C語言編制遞歸下降分析程序,并對Training語言進行語法分析。1. 待分析的Training語言語法。用擴充的表示如下:程序-function語句串endfunc語句串-語句;語句語句賦值語句賦值語句ID表達式表達式項+項|-項項因子*因子|/因子因子ID|NUM|(表達式)備注:實驗當中我對程序進行了擴展,增加了程序識別if條件判斷語句,while循環(huán)語句的功能2. 實驗要求說明輸入單詞串以“#結束,如果是
3、文法正確的句子,則輸出成功信息,打印success,否則輸出error”。四、程序流程圖主函數(shù):Scanner。函數(shù):irparser()函數(shù)yucu()/*語句串分析*/statement。/*語句分析函數(shù)*/expression。/*表達式分析函數(shù)*/開始i冏 J 1J tCTLllf )/中.可 析組數(shù)”J1貽inclort ) *P1 廣分機term()/* 項分析函數(shù)*/Retinn訊 J IJ tc?rrLi(4Ml *i */用嗡敷火另(J 一啊FScanerf)識別卜個 字符* 閃外折 函及/factor()/*因子分析函數(shù)*/NStiimrO別卜個字符-s*H蛤Searicr
4、Oin 別卜 TLt號沿J tJex pres 噌 口口。廣 : 達式分析函數(shù)申%必印1m劑Ft字符fnctiin品于研函數(shù)crmr1?tioi mil 儀he*五、程序代碼:遞歸下降分析文法:程序-function語句串endfunc語句串-語句;語句語句賦值語句|if條件語句|while循環(huán)語句賦值語句表達式表達式項+項|-項項因子*因子|/因子因子ID|NUM|(表達式)if條件語句(表達式)|(ID)|(NUM語句(表達式)|(ID)|(NUM備注:紅色字體部分為我對代碼實現(xiàn)功能的主要修改與擴展部分。/*語法分析源代碼*/#include#includecharprog80,token
5、8;charch;intsyn,p,m=0,n,sum,kk=0;char*rwtab6=function,if,then,while,do,endfunc;voidyucu();voidexpression。;voidstatement。;voidfactor。;voidterm();voidirparser();voidscaner()for(n=0;n8;n+)tokenn=NULL;while(ch=|ch=n)ch=progp+;m=0;if(ch=a)|(ch=A)while(ch=a)|(ch=A)|(ch=0)tokenm+=ch;ch=progp+;syn=10;for(n=
6、0;n6;n+)if(strcmp(token,rwtabn)=0)syn=n+1;break;tokenm+=0;elseif(ch=0)sum=0;while(ch=0)sum=sum*10+ch-0;ch=progp+;syn=11;elseswitch(ch)case:m=0;tokenm+=ch;ch=progp+;if(ch=)syn=24;tokenm+=ch;elsesyn=23;p-;break;case=:m=0;tokenm+=ch;ch=progp+;if(ch=)syn=25;tokenm+=ch;elsesyn=18;ch=prog-p;break;case!:m=
7、0;tokenm+=ch;ch=prog+p;if(ch=)syn=22;tokenm+=ch;elsesyn=-1;break;case+:syn=13;token0=ch;break;case-:syn=14;token0=ch;break;case*:syn=15;token0=ch;break;case/:syn=16;token0=ch;break;case;:syn=26;token0=ch;break;case(:syn=27;token0=ch;break;case):syn=28;token0=ch;break;case#:syn=0;token0=ch;break;defa
8、ult:syn=-1;break;ch=progp+;voidirparser()if(syn=1)scaner();yucu();/*語句串分析*/if(syn=6)/*讀至Uendfunc*/scaner();if(syn=0&kk=0)/*程序分析識別完*/printf(success);elseif(kk!=1)/*沒以endfunc結束*/printf(error!needendfunc);kk=1;elseprintf(error!needfunction);kk=1;voidyucu()/*語句串分析*/statement。;/*調用語句分析函數(shù)*/while(syn=26)/*
9、一個語句識別結束,繼續(xù)識別*/scaner();statement。;return;voidstatement。/*語句分析函數(shù)*/if(syn=10)scaner();if(syn=18)/如果是賦值語句scaner();expression。;/這個過程實現(xiàn)語法分析判斷語句elseprintf(error!evaluatetagerror);kk=1;elseif(syn=6)return;elseif(syn=2)/如果是條件判斷語句就判斷條件表達式的語法scaner();if(syn=27)/判斷括號匹配doscaner();/進入括號內部進行表達式分析expression。;whil
10、e(syn!=28);elseprintf(error!needanother);kk=1;/()內判斷完成!scaner();/然后進行語句塊分析!statement。;/到這里是實現(xiàn)判斷if語句的語法分析/類似的往里添加循環(huán)語句!elseif(syn=4)/如果是循環(huán)語句就判斷條件表達式的語法scaner();/ch=progp+;if(syn=27)doscaner();expression。;while(syn!=28);elseprintf(error!needanother);kk=1;/()內判斷完成!scaner();/然后進行語句塊分析!statement。;/這里是實現(xiàn)判斷
11、while語句的語法分析elseprintf(error!thestatementerror!);kk=1;voidexpression。/*表達式分析函數(shù)*/term();while(syn=13|syn=14)scaner();term();return;voidterm()/*項分析函數(shù)*/factor();while(syn=15|syn=16) scaner();factor。;return;voidfactor。/*因子分析函數(shù)*/if(syn=10|syn=11)scaner();else/*看是否是表達式*/expression。;if(syn=27)scaner();expr
12、ession。;if(syn=28)scaner();elseprintf(error!needanother);kk=1;elseprintf(error!expressionerror!);voidmain()p=0;printf(npleaseinputthestring:n);doch=getchar();progp+=ch;while(ch!=#);p=0;ch=progp+;scaner();irparser();六、測試用例測試用例1輸出結果測試用例2輸出結果測試用例3輸出結果functiona=1;b=2;c=a+b;endfunc#successfunctionif(31)a
13、=1;endfunc#successfunctionif(ab)a=1;while(a1)b=1;endfunc#success測試用例4a=1endfunc#輸出結果error!needfunctionPressanykeytocontinue七、輸出結果測試用例1:嘴譯原定代碼記事本心所u口福法分析蠢代唱Uib加口“plea&einputthestring:functiona-l;b=2;c=a+b;enduncttpuccessPressanykeytocontinue測試用例2二回譯原理WC碼記事本心ebug晤法分析/代嗎(pbEni,i9G.pleaseinputthestvingf
14、:unct;Ionif1a=l;cndfLinesu.eeessPressanvheytocontnue測試用例4譯原理1代碼記事本UJebum語法分析覆代螞(jitie-Angc).pleaseinputthestring:a=lendFunctterror!need,function*Pressdnykeytocontinue測試用例3百QUr iKT三毛*exnpuctt:liesI:i*xnjj:functiona:whilelb=l;endlfurkc:井sttccessPies&mn少Jceyt口continu.e八、實驗心得通過編譯原理實驗二語法分析實驗,使得自己對語法分析的流程有了更深刻的了解,使得語法分析遞歸向下思想更加具體化,雖然源代碼并非由自己設計,但是在調試程序的過程中,逐步理
溫馨提示
- 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年萊蕪下載貨運從業(yè)資格證模擬考試系統(tǒng)試題
- 單位空調安裝合同范本
- 刑法中勞務合同范本
- 刊物設計制作合同范本
- 寫好運輸合同范本
- 農(nóng)戶貸款合伙經(jīng)營合同范本
- 企業(yè)重組收購合同范本
- 供熱設備買賣合同范本
- 代理銀行開戶合同范本
- 代服務合同范本
- 智慧農(nóng)業(yè)中的農(nóng)業(yè)機械與設備管理技術
- 干式變壓器培訓課件
- 公司SWOT分析表模板
- 2023年上海中考語文試卷(附答案)
- 解決問題的工作方案
- 理發(fā)店業(yè)務轉讓協(xié)議書范本
- 2024年濰坊護理職業(yè)學院高職單招(英語/數(shù)學/語文)筆試歷年參考題庫含答案解析
- 2024年江蘇省中學生生物學奧林匹克初賽理論試題
- 環(huán)境年度報告
- 生產(chǎn)流水線的規(guī)劃方案
- 小針刀療法教學課件
評論
0/150
提交評論