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

下載本文檔

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

文檔簡介

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

2、in a:9;x:2*3;b:a+x end# 輸出 success 輸入 x:a+b*c end# 輸出 error實驗內(nèi)容利用C語言編制遞歸下降分析程序,并對簡單語言進行語法分析。算法設(shè)計和源程序 圖1 遞歸下降分析程序示意圖 圖1 遞歸下降分析程序示意圖 圖2 語句串分析示意圖 圖3 statement語句分析函數(shù)示意圖 圖4 expression表達式分析函數(shù)示意圖圖4 expression表達式分析函數(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、(請輸入1 或 2 n 1.詞法分析n 2.語法分析n); scanf(%d, &select); if (select = 1) do scaner(); switch (syn) case -1: printf(詞法分析 出錯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(語法分析出錯! 請檢查begin關(guān)鍵字n); re

5、turn; if (syn = 6)/end scaner(); if (syn = 0) printf(恭喜 語法分析 成功n); else printf(語法分析出錯! 請檢查是否缺少#n); else printf(語法分析出錯! 請檢查是否缺少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(詞法分析出錯! 請檢查是否輸入非法字符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(語法分析出錯! 請檢查表達式是否正確n); return; else pr

9、intf(語法分析出錯! 請檢查語句是否正確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(語法分析出錯! 請檢查是否缺少)n); return; else printf(語法分析出錯! 請檢查是否輸入非法字符n); return; 實驗結(jié)果分析正確實驗結(jié)果1:Begin a:=9 ; x

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論