




已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
編譯原理程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告表達(dá)式語法分析器的設(shè)計(jì)實(shí)現(xiàn)班級:計(jì)算機(jī)1306班姓名:王利達(dá)學(xué)號:20133959實(shí)驗(yàn)?zāi)繕?biāo):使用LL(1)分析法構(gòu)造表達(dá)式語法分析器程序,判別算術(shù)表達(dá)式,給出判別結(jié)果。實(shí)驗(yàn)內(nèi)容:一、概要設(shè)計(jì)1.算術(shù)表達(dá)式文法:E T | E0TT F | T1FF i | ( E )其中0:+ -1:* /i:數(shù)字或常數(shù)文法變換:E T MM 0 T M |T F | NN 1 F N |F i | ( E )其中0:+ -1:* /i:數(shù)字或常數(shù)2.LL(1)分析表表1.LL(1)分析表i+-*/()#EMT,pMT,pMMT,nMT,n,p,pTNF,pNF,pNNF,nNF,n,p,pF,n)E,n),n#OK二、數(shù)據(jù)結(jié)構(gòu)1.輸入表達(dá)式定義char型數(shù)組expstr為存放輸入表達(dá)式的數(shù)組,char expstr100;2.分析棧定義一個(gè)棧來進(jìn)行LL(1)分析。棧中有bottom、top、stacksize等元素,用于程序調(diào)用棧和對棧操作。typedef struct /定義語法的棧 SElemType *bottom;/底 SElemType *top;/頂 int stacksize;SqStack; (包括:概要設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)、流程圖、關(guān)鍵函數(shù)等有選擇填寫)源程序代碼:(加入注釋)#include#include#includeusing namespace std;#define STACKSIZE 30 /棧大小#define STACKINCREMENT 10 /棧增量#define OK 1#define Error 0#define OVERFLOW -1typedef char SElemType;typedef int Status;int i=0;int count1=0;int count2=0; /計(jì)數(shù)終結(jié)符的個(gè)數(shù)char expstr100;typedef struct /定義語法的棧 SElemType *bottom;/底 SElemType *top;/頂 int stacksize;SqStack;Status InitStack(SqStack &S) /初始化棧 S.bottom=(SElemType*)malloc(STACKSIZE*sizeof(SElemType); if(!S.bottom) exit(OVERFLOW); S.top=S.bottom; S.stacksize=STACKSIZE; return OK;Status PUSH(SqStack &S,SElemType e) if(S.top-S.bottom=S.stacksize) S.bottom=(SElemType*)realloc(S.bottom,(S.stacksize+STACKINCREMENT)*sizeof(SElemType); if(!S.bottom) exit(OVERFLOW); S.top=S.bottom+S.stacksize; S.stacksize+=STACKINCREMENT; *(S.top)=e; (S.top)+; return OK;Status POP(SqStack &S,SElemType &e) if(S.top=S.bottom) return Error; S.top-; e=*(S.top); return OK;void wrong()/調(diào)用此函數(shù),表示出錯(cuò) coutWrong!=0&sn=a&sn=0&c=a&c=0&si=a&si=0&si=a&si=0&si=a&si=0&si=a&si=z)/如果是數(shù)字或字母則依次計(jì)數(shù) while(ter_judge(e) if(e=si) i-; POP(S,e); else wrong(); while(count2!=0) i+; count2-; PUSH(S,e); i+; else /如果是+-*/則直接比較 if(e=si) i+; else wrong(); else wrong(); int main() SqStack S; InitStack(S); coutLL(1)nPlease enter the expression and end with the #:expstr; LL1(S,expstr,i); coutRight! endl; getchar(); return 0;程序運(yùn)行結(jié)果:(截屏)圖1.正確的算術(shù)表達(dá)式(a+b)*(c/B)的判斷圖2.錯(cuò)誤的算術(shù)表達(dá)式a/b+的判斷思考問題回答:(如
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025智能技術(shù)聯(lián)合研發(fā)合作合同
- 2025建筑施工外墻涂料合同范本
- 汽車維修技術(shù)檢測與診斷試題集
- 幼兒園學(xué)前教育論文
- 2025年消防演練現(xiàn)場情況總結(jié)范文(16篇)
- 《財(cái)務(wù)會計(jì)學(xué)》重點(diǎn)筆記
- 非機(jī)械驅(qū)動車輛項(xiàng)目投資風(fēng)險(xiǎn)評估報(bào)告
- 職業(yè)素養(yǎng)能力測試試卷及答案2025年
- 2025年心理障礙診治考試卷及答案
- 2025年項(xiàng)目投資與融資管理試卷及答案
- 2024京東代運(yùn)營服務(wù)合同范本
- 海上風(fēng)電柔性直流輸電系統(tǒng)先進(jìn)控制技術(shù)分析報(bào)告
- 2024屆四川省瀘州市龍馬潭區(qū)六年級語文小升初摸底考試含答案
- 三年級語文下冊 期末綜合模擬測試卷(人教浙江版)
- 尿培養(yǎng)的健康宣教
- 構(gòu)建自媒體內(nèi)容生產(chǎn)與運(yùn)營流程
- 煤礦井下安全避險(xiǎn)六大系統(tǒng) 課件 項(xiàng)目五供水施救系統(tǒng)建設(shè)
- 上海研學(xué)旅游計(jì)劃書
- 局灶性大腦挫傷伴出血查房
- 食品產(chǎn)業(yè)園區(qū)規(guī)劃設(shè)計(jì)方案案例
- 大一職業(yè)素養(yǎng)計(jì)劃書的總結(jié)
評論
0/150
提交評論