版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第1頁共6頁實驗報告實驗?zāi)康模赫莆帐止ど稍~法分析器的方法,了解詞法分析器的內(nèi)部工作原理。通過設(shè)計、編制調(diào)試一個具體的詞法分析程序,加深對詞法分析原理的理解。并掌握在對程序設(shè)計語言源程序進行掃描過程中,將其分解為各類單詞的詞法分析方法。掌握根據(jù)程序的偽代碼來編寫程序模塊程序源代碼。實驗內(nèi)容: 一實驗?zāi)康恼莆帐止ど稍~法分析器的方法,了解詞法分析器的內(nèi)部工作原理。通過設(shè)計編制調(diào)試一個具體的詞法分析程序,加深對詞法分析原理的理解。并掌握在對程序設(shè)計語言源程序進行掃描過程中將其分解為各類單詞的詞法分析方法。掌握根據(jù)程序的偽代碼來編寫程序模塊程序源代碼。二實驗涉及到的知識要點詞法分析器的功能輸入是源程序,輸出單詞符號。詞法分析可以采用如下兩種處理結(jié)構(gòu):(1)把詞法分析程序作為主程序;(2)把詞法分析程序作為語法分析程序調(diào)用的子程序。三實驗預(yù)習(xí)(以把詞法分析程序作為主程序為例)程序語言的單詞符號通常可以分以下五種:保留字、標識符、常數(shù)、運算符、界符。語法分析程序輸出的單詞符號通常以二元式的形式表示:(單詞種別,單詞自身的值)五程序結(jié)構(gòu)CH字符變量,用來存放最新讀進的字符。Token字符數(shù)組,存放構(gòu)成單詞的字符串。GetCH()字符數(shù)組,存放構(gòu)成單詞的字符串。GetBC()函數(shù),檢查CH中的字符是否為空格,若是,則調(diào)用GetCH直到CH中為一非空格。Concat()函數(shù),把CH中的字符連接到Token中。Letter()Digit()函數(shù),它們分別判斷CH中的字符是否為字母和數(shù)字。Reserve()函數(shù),對Token中的字符串查找關(guān)鍵字表,若它是一個關(guān)鍵字則回送相應(yīng)內(nèi)部編碼,否則回送0。Retract()函數(shù),把源程序緩沖區(qū)指針回退一個字符位置,并把CH置空白。Buildlist()將標識符登錄到符號表或?qū)⒊?shù)登錄到常數(shù)表。Error()出現(xiàn)非法字符,顯示錯誤信息。六實驗內(nèi)容題目:用以下語言詞法構(gòu)造規(guī)則,來構(gòu)造詞法分析器。詞法分析器的功能是輸入源程序,輸出單詞符號。詞法分析器的單詞符號常常表示成以下的二元式(單詞種別碼,單詞符號的屬性值)。詞法規(guī)則要求:①識別保留字:if、int、else、for、while、do、return、break、continue;單詞種別碼為1。②其他的都識別為標識符,標識符由字母開頭,后面可以是數(shù)字、字母和下劃線;單詞種別碼為2。③常數(shù)為無符號整形數(shù),無符號的整數(shù)由數(shù)字開頭,后面只包含數(shù)字;單詞種別碼為3。④運算符包括:+、-、*、/、=、>、<、>=、<=、<>;單詞種別碼為4。⑤分隔符(界符)包括:,、;、{、}、(、);單詞種別碼為5。程序輸入/輸出示例:如源程序為C語言。輸入如下一段:main()
{inta,b;a=10; b=a+20;}要求輸出如圖:(2,”main”)(5,”(“)(5,”)“)(5,”{“)(1,”int”)(2,”a”)(5,”,”)(2,”b”)(5,”;”)(2,”a”)(4,”=”)(3,”10”)(5,”;”)(2,”b”)(4,”=”)(2,”a”)(4,”+”)(3,”20”)(5,”;”)(5,”}“)【實驗過程記錄(源程序、測試用例、測試結(jié)果及心得體會等)】1、程序源代碼:#include"fstream.h"#include"iostream.h"#include"string.h"#include"ctype.h"charch;//存放當前的輸入字符intlineno=1;//記錄當前的行號voidmain()//主函數(shù){ voidReserve(ifstream&); ifstreamfin("input.txt",ios::nocreate);//用ifstream的對象fin打開input文件,文件不存在時,不創(chuàng)建 if(fin.fail())cout<<"找不到文件"<<endl; Reserve(fin); fin.close(); //fout.close(); //ferr.close(); }intjudge(char*string)//判斷是否為關(guān)鍵字{ char*keywords[1000]={"if","int","else","for","while","do","return","break","continue"};//關(guān)鍵字表,按相應(yīng)類型號排序 for(inti=0;i<=8;i++)//遍歷keywords數(shù)組 { if(!strcmp(string,*(keywords+i))) { return1;//是關(guān)鍵字,返回對應(yīng)的類型值 } } return0;//不是關(guān)鍵字,返回0}voidReserve(ifstream&fin)//詞法分析程序,用引用傳遞參數(shù){ chartemp[100];//臨時存放已讀入但無法判斷類型的字符 intj=0; intvalue_judge;//存放函數(shù)judge的返回值 while(fin.get(ch)) { if(ch=='\n'){lineno+=1;} elseif(ch=='\t'||ch==''){}//排除制表、空格字符 elseif(isalpha(ch))//當前輸入符為字母 { while(isalpha(ch)||isdigit(ch)) { temp[j]=ch; j++; fin.get(ch); } temp[j]='\0';//標志字符串結(jié)束 j=0; if(value_judge=judge(temp))//判斷是否為關(guān)鍵字 { cout<<"(1,"<<"\""<<temp<<"\")"<<endl; } elsecout<<"(2,"<<"\""<<temp<<"\")"<<endl; fin.seekg(-1,ios::cur);//回退1個字符 } elseif(isdigit(ch)) { while(isdigit(ch)) { temp[j]=ch; j++; fin.get(ch); } temp[j]='\0';//標志字符串結(jié)束 j=0; cout<<"(3,"<<"\""<<temp<<"\")"<<endl; fin.seekg(-1,ios::cur);//回退一個字符 } //+、-、*、/、=、>、<、>=、<=、<> elseif(ch=='+')cout<<"(4,"<<"\"+\")"<<endl; elseif(ch=='-')cout<<"(4,"<<"\"-\")"<<endl; elseif(ch=='*')cout<<"(4,"<<"\"*\")"<<endl; elseif(ch=='/')cout<<"(4,"<<"\"/\")"<<endl; elseif(ch=='=')cout<<"(4,"<<"\"=\")"<<endl; elseif(ch=='>')cout<<"(4,"<<"\">\")"<<endl; elseif(ch=='<')cout<<"(4,"<<"\"<\")"<<endl; elseif(ch=='>=')cout<<"(4,"<<"\">=\")"<<endl; elseif(ch=='<=')cout<<"(4,"<<"\"<=\")"<<endl; elseif(ch=='<>')cout<<"(4,"<<"\"<>\")"<<endl; //,、;、{、}、(、) elseif(ch==',')cout<<"(5,"<<"\",\")"<<endl; elseif(ch==';')cout<<"(5,"<<"\";\")"<<endl; elseif(ch=='(')cout<<"(5,"<<"\"(\")"<<endl; elseif
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年貨物運輸合同規(guī)定運輸方式與責任
- 2025年度歷史建筑保護拆墻工程合作協(xié)議4篇
- 2024豬場租賃承包合同
- 2024節(jié)能減排協(xié)議書
- 《中樞性高熱患者的護理與治療》課件
- 2025年度新媒體運營與公關(guān)合作服務(wù)合同范本4篇
- 2024年05月云南廣發(fā)銀行昆明分行招考筆試歷年參考題庫附帶答案詳解
- 2025年度大數(shù)據(jù)分析服務(wù)合同樣本8篇
- 2025變頻器代理商銷售合同:市場拓展與品牌推廣合作3篇
- 二零二五年度高端酒店集團食材供應(yīng)與服務(wù)合同3篇
- 常見老年慢性病防治與護理課件整理
- 履約情況證明(共6篇)
- 云南省迪慶藏族自治州各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 設(shè)備機房出入登記表
- 六年級語文-文言文閱讀訓(xùn)練題50篇-含答案
- 醫(yī)用冰箱溫度登記表
- 零售學(xué)(第二版)第01章零售導(dǎo)論
- 大學(xué)植物生理學(xué)經(jīng)典05植物光合作用
- 口袋妖怪白金光圖文攻略2周目
- 光伏發(fā)電站集中監(jiān)控系統(tǒng)通信及數(shù)據(jù)標準
- 三年級下冊生字組詞(帶拼音)
評論
0/150
提交評論