編譯原理實(shí)驗(yàn)二報(bào)告及完整可運(yùn)行代碼和實(shí)驗(yàn)結(jié)果截圖_第1頁
編譯原理實(shí)驗(yàn)二報(bào)告及完整可運(yùn)行代碼和實(shí)驗(yàn)結(jié)果截圖_第2頁
編譯原理實(shí)驗(yàn)二報(bào)告及完整可運(yùn)行代碼和實(shí)驗(yàn)結(jié)果截圖_第3頁
編譯原理實(shí)驗(yàn)二報(bào)告及完整可運(yùn)行代碼和實(shí)驗(yàn)結(jié)果截圖_第4頁
編譯原理實(shí)驗(yàn)二報(bào)告及完整可運(yùn)行代碼和實(shí)驗(yàn)結(jié)果截圖_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、編譯原理實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)二 語法分析 班 級(jí): 13級(jí)軟件5班 學(xué) 號(hào): 姓 名: 任課教師: 邢 計(jì)算機(jī)科學(xué)與工程系2016年 6 月 14 日 實(shí)驗(yàn)?zāi)康木幹埔粋€(gè)遞歸下降分析程序,實(shí)現(xiàn)對(duì)詞法分析程序所提供的單詞序列的語法檢查和結(jié)構(gòu)分析。實(shí)驗(yàn)要求1待分析的簡單語言的語法用擴(kuò)充的BNF表示如下: (1):beginend (2):;(3)(語句):賦值語句)(4)賦值語句):ID:(5):+|-(6)(項(xiàng)):因子)*|/(7)因子):ID|NUM|()2實(shí)驗(yàn)要求說明 輸入單詞串,以“#”結(jié)束,如果是文法正確的句子,則輸出成功信息,打印“success”,否則輸出“error”。例如: 輸入 beg

2、in a:9;x:2*3;b:a+x end# 輸出 success 輸入 x:a+b*c end# 輸出 error實(shí)驗(yàn)內(nèi)容利用C語言編制遞歸下降分析程序,并對(duì)簡單語言進(jìn)行語法分析。算法設(shè)計(jì)和源程序 圖1 遞歸下降分析程序示意圖 圖1 遞歸下降分析程序示意圖 圖2 語句串分析示意圖 圖3 statement語句分析函數(shù)示意圖 圖4 expression表達(dá)式分析函數(shù)示意圖圖4 expression表達(dá)式分析函數(shù)示意圖 圖5 term分析函數(shù)示意圖 圖6 factor分析過程示意圖#include #include #include char prog100, ch, token8;int p

3、 = 0, syn, n, i;char* keyword6 = begin, then, if, while, do, end ;void scaner();void Irparse();void statement();void expression_r();void term();void factor();void main() int select = -1; p = 0; printf(please input sentence, end of # !n); do ch = getchar(); progp+ = ch; while (ch != #); p = 0; printf

4、(請(qǐng)輸入1 或 2 n 1.詞法分析n 2.語法分析n); scanf(%d, &select); if (select = 1) do scaner(); switch (syn) case -1: printf(詞法分析 出錯(cuò)n); break; default: printf(n, syn, token); break; while (syn != 0); printf(詞法分析 成功n); else if (select = 2) scaner(); if (syn = 1) Irparse(); /begin else printf(語法分析出錯(cuò)! 請(qǐng)檢查begin關(guān)鍵字n); re

5、turn; if (syn = 6)/end scaner(); if (syn = 0) printf(恭喜 語法分析 成功n); else printf(語法分析出錯(cuò)! 請(qǐng)檢查是否缺少#n); else printf(語法分析出錯(cuò)! 請(qǐng)檢查是否缺少endn); getchar();void scaner() for (n = 0; n = a & ch = A & ch = a & ch = a & ch = 0 & ch = 9); syn = 10; for (n = 0; n = 0 & ch = 0 & ch = 9); syn = 11; return; else /ch=pro

6、gp+; switch (ch) 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 = 17; token0 = ch; ch = progp+; if (ch = =) token1 = ch; syn+; else p-; break; case ) token1 = ch; syn+; else if (ch = =

7、) token1 = ch; syn = syn + 2; else p-; break; case : syn = 23; token0 = ch; ch = progp+; if (ch = =) token1 = ch; syn+; else p-; break; case =: syn = 25; token0 = ch; break; case ;: syn = 26; token0 = ch; break; case (: syn = 27; token0 = ch; break; case ): syn = 28; token0 = ch; break; case #: syn

8、= 0; token0 = ch; break; default: printf(詞法分析出錯(cuò)! 請(qǐng)檢查是否輸入非法字符n); syn = -1; break; /return; void Irparse() scaner(); statement(); while (syn = 26)/; scaner(); statement(); void statement() if (syn = 10) scaner(); if (syn = 18) scaner(); expression_r(); else printf(語法分析出錯(cuò)! 請(qǐng)檢查表達(dá)式是否正確n); return; else pr

9、intf(語法分析出錯(cuò)! 請(qǐng)檢查語句是否正確n); return; void expression_r() term(); while (syn = 13 | syn = 14)/+ - scaner(); term(); void term() factor(); while (syn = 15 | syn = 16)/* / scaner(); factor(); void factor() if (syn = 10 | syn = 11) scaner(); else if (syn = 27) scaner(); expression_r(); if (syn = 28) scaner(); else printf(語法分析出錯(cuò)! 請(qǐng)檢查是否缺少)n); return; else printf(語法分析出錯(cuò)! 請(qǐng)檢查是否輸入非法字符n); return; 實(shí)驗(yàn)結(jié)果分析正確實(shí)驗(yàn)結(jié)果1:Begin a:=9 ; x

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論