




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上編譯原理程序設計實驗報告實驗題目班級:計算機1507班 姓名:羅藝博學號:一、實驗目標:詞法分析掃描器的設計實現(xiàn)。在程序源文件中輸入類C語言程序源文件,設計詞法分析掃描器,并以TOKEN類別碼序列的形式輸出掃描結(jié)果。二、實驗內(nèi)容:1.概要設計:將程序大致分為:主函數(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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 靈活調(diào)整條款場地租賃合同適應乙方發(fā)展需求
- 車輛購置補貼貸款服務協(xié)議
- 茶藝培訓與茶具租賃服務合作協(xié)議
- 浙江省寧波市2024-2025學年高一語文上學期10月月考試題含答案
- 2025年國際法治與人權(quán)專業(yè)入學考試試卷及答案
- 2025年財務審計師考試復習資料及答案
- 農(nóng)業(yè)現(xiàn)代化廠房租賃合同協(xié)議
- 車輛轉(zhuǎn)讓及原廠零配件供應協(xié)議
- 成華區(qū)房產(chǎn)銷售無責任底薪銷售業(yè)績提升方案合同
- 鄉(xiāng)村網(wǎng)絡新年活動方案
- 重大事故隱患判定標準與相關(guān)事故案例培訓課件
- 自來水廠運行工試題庫題庫及答案
- CJT 166-2014 建設事業(yè)集成電路(IC)卡應用技術(shù)條件
- 食材配送服務方案投標方案【修訂版】(技術(shù)標)
- 2024年江蘇中考地理試卷(帶有答案)
- 國家開放大學本科《納稅籌劃》在線形考(形考任務一至五)試題及答案
- 統(tǒng)編版2024屆高一數(shù)學第二學期期末經(jīng)典試題含解析
- 江蘇省江陰市普通高中2023-2024學年物理高一第二學期期末統(tǒng)考試題含解析
- MOOC 油氣田應用化學-西南石油大學 中國大學慕課答案
- GB/T 43731-2024生物樣本庫中生物樣本處理方法的確認和驗證通用要求
- (高清版)TDT 1063-2021 國土空間規(guī)劃城市體檢評估規(guī)程
評論
0/150
提交評論