版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
山東科技大學(xué)學(xué)生課程設(shè)計(jì)詞法分析程序一、設(shè)計(jì)目的編制一個(gè)遞歸下降分析程序, 實(shí)現(xiàn)對(duì)詞法分析程序所提供的單詞序列的語(yǔ)法檢查和結(jié)構(gòu)分析。二、設(shè)計(jì)要求利用C語(yǔ)言編制遞歸下降分析程序,并對(duì)簡(jiǎn)單語(yǔ)言進(jìn)行語(yǔ)法分析。2.1待分析的簡(jiǎn)單語(yǔ)言的語(yǔ)法用擴(kuò)充的BNF表示如下:⑴<程序>::=begin<語(yǔ)句串>end⑵<語(yǔ)句串>::=<語(yǔ)句>{;<語(yǔ)句>}⑶<語(yǔ)句>::=<賦值語(yǔ)句>⑷<賦值語(yǔ)句>::=ID:=<表達(dá)式>⑸<表達(dá)式>::=<項(xiàng)>{+<項(xiàng)>|-<項(xiàng)>}⑹<項(xiàng)>::=<因子>{*<因子>|/<因子>⑺<因子>::=ID|NUM|(<表達(dá)式>)2.2實(shí)驗(yàn)要求說(shuō)明輸入單詞串,以“#”結(jié)束,如果是文法正確的句子,則輸出成功信息,打印“success”,否則輸出“error”。例如:輸入 begina:=9;x:=2*3;b:=a+xend#輸出 success!輸入 x:=a+b*cend#輸出 error1山東科技大學(xué)學(xué)生課程設(shè)計(jì)三、設(shè)計(jì)說(shuō)明(含主要算法的流程圖)1、主程序示意圖如圖 2-1所示。置初值調(diào)用scaner讀下一個(gè)單詞符號(hào)調(diào)用lrparser結(jié)束圖2-1語(yǔ)法分析主程序示意圖2、遞歸下降分析程序示意圖如圖 2-2所示。3、語(yǔ)句串分析過(guò)程示意圖如圖 2-3所示。2山東科技大學(xué)學(xué)生課程設(shè)計(jì)是否否begin?是調(diào)用scaner調(diào)用語(yǔ)句串分析程序否是否end?是調(diào)用scaner否syn=0&&kk=0?析示意圖是打印分析成功 出錯(cuò)處理圖2-2遞歸下降分析程序示意圖
調(diào)用statement函數(shù)是否;? 否是調(diào)用scaner調(diào)用statement函數(shù)出錯(cuò)處理圖2-3語(yǔ)句串分3山東科技大學(xué)學(xué)生課程設(shè)計(jì)4、statement語(yǔ)句分析程序流程如圖 2-4、2-5、2-6、2-7所示。是否標(biāo)識(shí)符?否 調(diào)用scaner是否:=?調(diào)用scaner
否調(diào)用term函數(shù)是否+,-?否 是調(diào)用scaner調(diào)用term函數(shù)調(diào)用expression函數(shù)出錯(cuò)處理 出錯(cuò)處理圖2-4statement語(yǔ)句分析函數(shù)示意圖 圖2-5expression表達(dá)式分析函數(shù)示意圖4山東科技大學(xué)學(xué)生課程設(shè)計(jì)調(diào)用factor函數(shù)是是否標(biāo)識(shí)符?否否是否*,/?是是否整常數(shù)?是調(diào)用scaner否否是否(?調(diào)用factor函數(shù)是出錯(cuò)處理調(diào)用scaner圖2-6term分析函數(shù)示意圖調(diào)用expression函數(shù)否是否)?是出錯(cuò)處理調(diào)用scaner調(diào)用scaner圖2-7factor分析過(guò)程示意圖5、實(shí)驗(yàn)源代碼#include"stdio.h"#include"string.h"charprog[100],token[8],ch;char*rwtab[6]={"begin","if","then","while","do","end"};intsyn,p,m,n,sum;intkk;factor();expression();yucu();5山東科技大學(xué)學(xué)生課程設(shè)計(jì)term();statement();lrparser();scaner();main(){p=kk=0;printf("\npleaseinputastring(endwith'#'):\n");do{scanf("%c",&ch);prog[p++]=ch;}while(ch!='#');p=0;scaner();lrparser();getch();}lrparser(){if(syn==1){scaner(); /*讀下一個(gè)單詞符號(hào)*/yucu(); /*調(diào)用yucu()函數(shù);*/if(syn==6){scaner();if((syn==0)&&(kk==0))printf("success!\n");}else{if(kk!=1)printf("thestringhaven'tgota'end'!\n");kk=1;}}else{printf("haven'tgota'begin'!\n");kk=1;}return;}yucu()6山東科技大學(xué)學(xué)生課程設(shè)計(jì){statement(); /*調(diào)用函數(shù)statement();*/while(syn==26){scaner(); /*讀下一個(gè)單詞符號(hào)*/if(syn!=6)statement(); /*調(diào)用函數(shù)statement();*/}return;}statement(){if(syn==10){scaner(); /*讀下一個(gè)單詞符號(hào)*/if(syn==18){scaner(); /*讀下一個(gè)單詞符號(hào)*/expression(); /*調(diào)用函數(shù)statement();*/}else{printf("thesing':='iswrong!\n");kk=1;}}else{printf("wrongsentence!\n");kk=1;}return;}expression(){term();while((syn==13)||(syn==14)){scaner(); /*讀下一個(gè)單詞符號(hào)*/term(); /*調(diào)用函數(shù)term();*/}return;}term(){factor();while((syn==15)||(syn==16))7山東科技大學(xué)學(xué)生課程設(shè)計(jì){scaner(); /*讀下一個(gè)單詞符號(hào)*/factor(); /*調(diào)用函數(shù)factor();*/}return;}factor(){if((syn==10)||(syn==11))scaner();elseif(syn==27){scaner(); /*讀下一個(gè)單詞符號(hào)*/expression(); /*調(diào)用函數(shù)statement();*/if(syn==28)scaner(); /*讀下一個(gè)單詞符號(hào)*/else{printf("theerroron'('\n");kk=1;}}else{printf("theexpressionerror!\n");kk=1;}return;}scaner(){ sum=0;for(m=0;m<8;m++)token[m++]=NULL;m=0;ch=prog[p++];while(ch=='')ch=prog[p++];if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))){while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))){token[m++]=ch;ch=prog[p++];}p--;syn=10;token[m++]='\0';for(n=0;n<6;n++)if(strcmp(token,rwtab[n])==0)8山東科技大學(xué)學(xué)生課程設(shè)計(jì){syn=n+1;break;}}elseif((ch>='0')&&(ch<='9')){while((ch>='0')&&(ch<='9')){sum=sum*10+ch-'0';ch=prog[p++];}p--;syn=11;}elseswitch(ch){case'<':m=0;ch=prog[p++];if(ch=='>'){syn=21;}elseif(ch=='='){syn=22;}else{syn=20;p--;}break;case'>':m=0;ch=prog[p++];if(ch=='='){syn=24;}else{syn=23;p--;}break;case':':m=0;ch=prog[p++];9山東科技大學(xué)學(xué)生課程設(shè)計(jì)if(ch=='='){syn=18;}else{syn=17;p--;}break;case'+':syn=13;break;case'-':syn=14;break;case'*':syn=15;break;case'/':syn=16;break;case'(':syn=27;break;case')':syn=28;break;case'=':syn=25;break;case';':syn=26;break;case'#':syn=0;break;default:syn=-1;break;}}四、運(yùn)行結(jié)果及分析輸入 begina:=9;x:=2*3;b:=a+xend# 后輸出success!如圖4-1所示:10山東科技大學(xué)學(xué)生課程設(shè)計(jì)圖4-1輸入 x:=a+b*cend # 后輸出 error如圖4-2所示:圖4-2五、總結(jié)通過(guò)本次試驗(yàn),了解了語(yǔ)法分析的運(yùn)行過(guò)程,主程序
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年通信協(xié)議與網(wǎng)絡(luò)協(xié)議進(jìn)階題集
- 2026年解釋針對(duì)職場(chǎng)溝通技巧和禮儀的考核題目
- 2026年金融投資安全試題解析投資風(fēng)險(xiǎn)與防范策略
- 2026年系統(tǒng)架構(gòu)師面試復(fù)雜算法題的解決思路
- 2026年企業(yè)內(nèi)部培訓(xùn)資料CNAS企業(yè)質(zhì)量認(rèn)證標(biāo)準(zhǔn)相關(guān)試題
- 2026年能源工程項(xiàng)目收尾技術(shù)要點(diǎn)題解
- 2026年政府政策與法律解讀公務(wù)員筆試實(shí)務(wù)模擬題
- 2026年財(cái)務(wù)管理與財(cái)務(wù)分析考試寶典
- 2026年審計(jì)從業(yè)者易混淆知識(shí)點(diǎn)錯(cuò)題集
- 2026年程序員進(jìn)階考試題庫(kù)代碼與算法全解析
- 專(zhuān)利免責(zé)合同范例
- 《我國(guó)中藥飲片產(chǎn)業(yè)國(guó)際競(jìng)爭(zhēng)力探析》9200字(論文)
- 檢驗(yàn)項(xiàng)目管理培訓(xùn)
- 《梅毒診斷及治療》課件
- DB45T 2313-2021 奶水牛同期發(fā)情-人工授精操作技術(shù)規(guī)程
- 購(gòu)買(mǎi)助動(dòng)車(chē)合同模板
- 兩個(gè)合伙人股權(quán)協(xié)議書(shū)范文模板
- GB/T 44082-2024道路車(chē)輛汽車(chē)列車(chē)多車(chē)輛間連接裝置強(qiáng)度要求
- 控?zé)熤嗅t(yī)科普知識(shí)講座
- 脫碳塔CO2脫氣塔設(shè)計(jì)計(jì)算
- 產(chǎn)品報(bào)價(jià)單貨物報(bào)價(jià)表(通用版)
評(píng)論
0/150
提交評(píng)論