




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上編譯原理程序設(shè)計實驗報告實驗題目班級:計算機1507班 姓名:羅藝博學(xué)號:一、實驗?zāi)繕耍涸~法分析掃描器的設(shè)計實現(xiàn)。在程序源文件中輸入類C語言程序源文件,設(shè)計詞法分析掃描器,并以TOKEN類別碼序列的形式輸出掃描結(jié)果。二、實驗內(nèi)容:1.概要設(shè)計:將程序大致分為:主函數(shù)、識別器(有限自動機state_change)、詞法分析器(state_to_code)三大部分。其中,主函數(shù)所完成的功能為:打開、讀取、關(guān)閉文件(即C語言源程序),重置token串等。識別器的功能為:識別字符,完成token串的生成,判斷詞法錯誤等。詞法分析器的功能為:生成token類別碼,判斷token
2、是否出錯等。主函數(shù)、識別器、詞法分析器關(guān)系圖2.流程圖詞法分析掃描器流程圖3.關(guān)鍵函數(shù)a. 識別器(有限自動機state_change)int state_change(state,ch) /識別器,有限自動機if(ch = ) | (ch = t) | (ch = n)/略去空格、TAB、換行 return 0; else if(IsAlpha(ch) = 1) | (ch = _)/判斷是否為字母或_,從而判斷是關(guān)鍵字、標識符、CT字符還是ST字符串 if(state = 1) return 2; else if(state = 2) return 2; else if(state = 7
3、) return 8; else if(state = 8) return 8; else if(state = 10) return 11; else if(state = 11) return 11; else if(state = 6)/考慮與PT相連的情況 state_to_code(state_before,token); i = 0; memset(token,0,10); return 2; else return -1; else if(IsNum(ch) = 1)/判斷是否為數(shù)字,從而進一步判斷是為IT,CT,KT if(state = 1) return 3; else i
4、f(state = 2) return 2; else if(state = 3) return 3; else if(state = 4) return 4; else if(state = 5) return 5; else if(state = 6)/考慮與PT相連的情況 state_to_code(state_before,token); i = 0; memset(token,0,10); return 3; else return -1; else if(ch = .)/判斷是否為CT中的小數(shù)點 if(state = 3) return 4; else return -1; els
5、e if(ch = )/判斷是否為CT字符 if(state = 1) return 7; else if(state = 6)/考慮與PT相連的情況 state_to_code(state_before,token); i = 0; memset(token,0,10); return 7; else if(state = 8) return 9; else return -1; else if(ch = )/判斷是否為ST if(state = 1) return 10; else if(state = 6)/考慮與PT相連的情況 state_to_code(state_before,to
6、ken); i = 0; memset(token,0,10); return 10; else if(state = 11) return 12; else return -1; else/判斷是否為PT if(state = 1) return 6; else if(state = 2)/考慮與IT,KT相連的情況 state_to_code(state_before,token); i = 0; memset(token,0,10); return 6; else if(state = 3)/考慮與CT相連的情況 state_to_code(state_before,token); i
7、= 0; memset(token,0,10); return 6; else if(state = 9)/考慮與CT字符相連的情況 state_to_code(state_before,token); i = 0; memset(token,0,10); return 6; else if(state = 12)/考慮與ST相連的情況 state_to_code(state_before,token); i = 0; memset(token,0,10); return 6; else if(state = 6) if(i = 1)&(ch = =)&(token0 = )|(token0
8、= )|(token0 = =) return 6; else return 0; else return -1; b. 詞法分析器(state_to_code)int state_to_code(state_before,token)/詞法分析器 int n; /循環(huán) code1 = 0; code2 = 0;switch(state_before)case 2:/KT for(n=0; n6; n+) if(strcmp(token, KTn) = 0) code1 = 1; code2 = n; printf(n,code1,code2); /why改變不了全局的code1,code2
9、break; if(code1 = 0)/IT printf(n); break;case 3:/CT printf(n); break; case 5:/CT(小數(shù)) printf(n); break; case 6:/PT for(n=0; n18; n+) if(strcmp(token, PTn) = 0) code1 = 6; code2 = n; printf(n,code1,code2); /why改變不了全局的code1,code2 break; break; case 9:/CT字符 printf(n); break; case 12:/ST printf(n); break
10、; default :/不被任何詞識別 printf(Sorry its going wrong!);return 0;c.判斷函數(shù)int IsAlpha(char c)/判斷是否為字母 if(c=a)&(c=A)&(c=0&c=9) return 1; else return 0;int IsKey(char *word)/判斷是否為關(guān)鍵字 int m,n; for(n=0; n6; n+) if(m = strcmp(word, KTn) = 0) if(n = 0) return 2; return 1; return 0;int IsDelimiter(char *token)/判斷是
11、否為界符 int m,n; for(n=0; n18; n+) if(m = strcmp(token, PTn) = 0) if(n = 0) return 2; return 1; return 0;源程序代碼:(加入注釋)#include #include #include FILE *fp;char input200; /存放輸入字符串char token10;/存放構(gòu)成單詞符號的符號串char word10; /存放識別出的單詞流char ch;/存放當前讀入字符int p;/input下標int i=0; /token下標int state;/存放狀態(tài)標記int code1; /t
12、oken類別碼,1-KT,2-IT,3-CT,4-CTT,5-ST,6-PTint code2;int state_before;/存放之前狀態(tài)int num;/存放整形值char *KT6 = int, main, void, if, else, char; /1char *PT18 = =, , )|(token0 = )|(token0 = =) return 6; else return 0; else return -1; int state_to_code(state_before,token)/詞法分析器 int n; /循環(huán) code1 = 0; code2 = 0;switc
13、h(state_before)case 2:/KT for(n=0; n6; n+) if(strcmp(token, KTn) = 0) code1 = 1; code2 = n; printf(n,code1,code2); /why改變不了全局的code1,code2 break; if(code1 = 0)/IT printf(n); break;case 3:/CT printf(n); break; case 5:/CT(小數(shù)) printf(n); break; case 6:/PT for(n=0; n18; n+) if(strcmp(token, PTn) = 0) cod
14、e1 = 6; code2 = n; printf(n,code1,code2); /why改變不了全局的code1,code2 break; break; case 9:/CT字符 printf(n); break; case 12:/ST printf(n); break; default :/不被任何詞識別 printf(Sorry its going wrong!);return 0;int IsAlpha(char c)/判斷是否為字母 if(c=a)&(c=A)&(c=0&c=9) return 1; else return 0;int IsKey(char *word)/判斷是否為關(guān)鍵字 int m,n; for(n=0; n6; n+) if(m =
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 IEC TR 63502:2024 EN Guidelines for parameters measurement of HVDC transmission line
- 2025-2030年中國鉛鋅行業(yè)十三五投資分析及發(fā)展風(fēng)險評估報告
- 2025-2030年中國酵母核糖核酸市場運行趨勢及投資戰(zhàn)略研究報告
- 2025-2030年中國速溶固體飲料市場發(fā)展趨勢及前景調(diào)研分析報告
- 2025-2030年中國豆腐市場運行狀況及發(fā)展趨勢分析報告
- 2025-2030年中國血液透析機市場運營現(xiàn)狀及發(fā)展前景規(guī)劃分析報告
- 2025-2030年中國脫咖啡因綠茶市場發(fā)展策略規(guī)劃分析報告
- 2025-2030年中國美白護膚市場運行狀況及投資戰(zhàn)略研究報告
- 2025年上海市建筑安全員-A證考試題庫及答案
- 農(nóng)藥經(jīng)營管理知識培訓(xùn)專家講座
- 《自主創(chuàng)新對于鋼結(jié)構(gòu)發(fā)展的重要性》2400字
- 食品采購與進貨臺賬
- GB/T 24353-2022風(fēng)險管理指南
- GB/T 6284-2006化工產(chǎn)品中水分測定的通用方法干燥減量法
- GB/T 3003-2017耐火纖維及制品
- GB/T 22080-2016信息技術(shù)安全技術(shù)信息安全管理體系要求
- GB/T 13915-2013沖壓件角度公差
- 制藥工程導(dǎo)論課件
- 瑜伽師地論(完美排版全一百卷)
- 槳聲燈影里的秦淮河1-課件
評論
0/150
提交評論