![C語言詞法分析器構(gòu)造實驗報告_第1頁](http://file4.renrendoc.com/view/ee0c2da31b38f4e8b23056c16b373740/ee0c2da31b38f4e8b23056c16b3737401.gif)
![C語言詞法分析器構(gòu)造實驗報告_第2頁](http://file4.renrendoc.com/view/ee0c2da31b38f4e8b23056c16b373740/ee0c2da31b38f4e8b23056c16b3737402.gif)
![C語言詞法分析器構(gòu)造實驗報告_第3頁](http://file4.renrendoc.com/view/ee0c2da31b38f4e8b23056c16b373740/ee0c2da31b38f4e8b23056c16b3737403.gif)
![C語言詞法分析器構(gòu)造實驗報告_第4頁](http://file4.renrendoc.com/view/ee0c2da31b38f4e8b23056c16b373740/ee0c2da31b38f4e8b23056c16b3737404.gif)
![C語言詞法分析器構(gòu)造實驗報告_第5頁](http://file4.renrendoc.com/view/ee0c2da31b38f4e8b23056c16b373740/ee0c2da31b38f4e8b23056c16b3737405.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
編譯原理C語言詞法分析器構(gòu)造學(xué)院:信工班級:140學(xué)號:201114002姓名:馬鵬程指導(dǎo)教師:張帆2014年6月12日一、實驗題目:編譯原理詞法分析二、實驗內(nèi)容:2.1主程序設(shè)計考慮:主程序的說明部分為各種表格和變量安排空間(關(guān)鍵字和特殊符號表)。id和ci數(shù)組分別存放標(biāo)識符和常數(shù);還有一些為造表填表設(shè)置的變量。主程序的工作部分建議設(shè)計成便于調(diào)試的循環(huán)結(jié)構(gòu)。每個循環(huán)處理一個單詞;調(diào)用詞法分析過程;輸出每個單詞的內(nèi)部碼(種別編碼,屬性值)。建議從文件中讀取要分析的符號串。2.2詞法分析過程考慮該過程根據(jù)輸入單詞的第一個有效字符(有時還需讀第二個字符),判斷單詞種別,產(chǎn)生種別編碼。對于標(biāo)識符和常數(shù),需分別與標(biāo)識符表和常數(shù)表中已登記的元素相比較,如表中已有該元素,則記錄其在表中的位置,如未出現(xiàn)過,將標(biāo)識符按順序填入數(shù)組id中,將常數(shù)存入數(shù)組中ci中,并記錄其在表中的位置。注:所有識別出的單詞都用二元組表示。第一個表示單詞的種別編碼。例如:關(guān)鍵字的t=1;標(biāo)識符的t=2;常數(shù)t=3;運算符t=4;界符t=5。第二個為該單詞在各自表中的指針或內(nèi)部碼值(常數(shù)表和標(biāo)識符表是在編譯過程中建立起來的。其i值是根據(jù)它們在源程序中出現(xiàn)的順序確定的)。關(guān)鍵字和特殊符號如下(表中數(shù)字只是標(biāo)記,不代表種別編碼,種別編碼自己定義):編號12345678910名字intcharfloatvoidconstifelsedowhilescanf編號11121314151617181920名字printfreturnmainread+–*/%=編號21222324252627282930名字==><!=>=<=&&||!<>編號31323334353637383940名字(){};,“‘++--將詞法分析程序設(shè)計成獨立一遍掃描源程序的結(jié)構(gòu)。其主流程圖如下:圖1詞法分析程序流程圖三、程序源代碼:#include"stdafx.h"#include<iostream>#include<string>#include<math.h>#include<fstream>usingnamespacestd;//關(guān)鍵字結(jié)構(gòu)體structkey{stringkey_word; intbm; stringzjf;};//界符結(jié)構(gòu)體structJF{charjf_ch; intbm; stringzjf;};//運算符結(jié)構(gòu)體structysf{stringysf_w; intbm; stringzjf;};//得到關(guān)鍵字字母表voidfuc_K_table(keyK_w[]){inti=0; ifstreaminfile("E:\\cffx\\key.txt",ios::in); if(!infile) {cerr<<"openerror!"<<endl;} for(i=0;i<12;i++) {infile>>K_w[i].key_word; infile>>K_w[i].bm; infile>>K_w[i].zjf;} infile.close();}//得到界符字母表voidfuc_JF_table(JFJ_CHAR[]){inti=0; ifstreaminfile("E:\\cffx\\jf.txt",ios::in); if(!infile) {cerr<<"openerror!"<<endl;} for(i=0;i<9;i++) {infile>>J_CHAR[i].jf_ch; infile>>J_CHAR[i].bm; infile>>J_CHAR[i].zjf;} infile.close();}//得到運算符表voidfuc_ysf_table(ysfYSF_W[]){inti=0; ifstreaminfile("E:\\cffx\\ysf.txt",ios::in); if(!infile) {cerr<<"openerror!"<<endl;} for(i=0;i<18;i++) {infile>>YSF_W[i].ysf_w; infile>>YSF_W[i].bm;infile>>YSF_W[i].zjf;} infile.close();}//查找是否為保留字intReserve(stringstrToken,keyK_w[]){inti=0; for(i=0;i<12;i++) if(strToken==K_w[i].key_word)returnK_w[i].bm; if(i>=12)return-1;}//查找是否為界符intReservejf(charch,JFJ_CHAR[]){inti=0; for(i=0;i<9;i++) if(ch==J_CHAR[i].jf_ch)returnJ_CHAR[i].bm; if(i>=9)return-1;}//查找是否為運算符intReserveysf(stringstrToken,ysfYSF_W[]){inti=0; for(i=0;i<18;i++) if(strToken==YSF_W[i].ysf_w)returnYSF_W[i].bm; if(i>=18)return-1;}//將strToken中的常數(shù)插入常數(shù)表intInsertConst(stringstrToken,keyK_w[]){inti=0,j=0,m=0; while(strToken[i]!='\0')i++; for(j=0;j<i;j++)m=10*m+((int)strToken[j]-48); returnm;}//判斷是否為字母boolIsLetter(charch){if((ch>=97&&ch<=122)||( ch>=65&&ch<=90))returntrue;elsereturnfalse;}//判斷是否為數(shù)字boolIsDigit(charch){if((ch>=48&&ch<=57))returntrue;elsereturnfalse;}//判斷是否為界符boolIsJF(charch){switch(ch) {case'{':case'}':case'[':case']':case'(':case')':case';':case',': case'"':returntrue; default:returnfalse;}}//判斷是否為運算符boolIsYSF(charch){boolre=false; switch(ch) {case'>':case'<':case'=':case'+':case'-':case'*': case'/':case'%':case'&':case'|':case'!': case'"':{re=true;break;}}returnre;}//主函數(shù)intmain(intargc,char*argv[]){keyK_w[12];JFJ_CHAR[9]; ysfYSF_W[18]; fuc_K_table(K_w);fuc_JF_table(J_CHAR); fuc_ysf_table(YSF_W);inti=0; cout<<"關(guān)鍵字種別編碼表:"<<endl; for(i=0;i<12;i++) cout<<K_w[i].key_word<<""<<K_w[i].bm<<endl; cout<<"界符種別編碼表:"<<endl; for(i=0;i<9;i++) cout<<J_CHAR[i].jf_ch<<""<<J_CHAR[i].bm<<endl; cout<<"運算符種別編碼表:"<<endl; for(i=0;i<18;i++) cout<<YSF_W[i].ysf_w<<""<<YSF_W[i].bm<<endl; cout<<"常數(shù)的種別編碼為:50"<<endl; cout<<"普通標(biāo)識符的種別編碼為:51"<<endl; FILE*fp; fp=fopen("E:\\cffx\\f1.txt","r"); cout<<"詞法分析器輸出結(jié)果為:"<<endl; charch;intdigit=0; stringstrToken; if(fp==NULL) {cout<<"error"; exit(0);}else {while(ch!='#') {strToken="\0"; ch=fgetc(fp); if(ch==''||ch=='\t'||ch=='\n'){} else if(IsLetter(ch)) {while(IsLetter(ch)||IsDigit(ch)) {strToken=strToken+ch; ch=fgetc(fp);} fseek(fp,-1L,SEEK_CUR); i=Reserve(strToken,K_w); if(i>-1) cout<<'('<<strToken<<','<<i<<')'<<endl; else cout<<'('<<strToken<<",51)"<<endl;} else if(IsDigit(ch)) {while(IsDigit(ch)) {strToken=strToken+ch; ch=fgetc(fp);} fseek(fp,-1L,SEEK_CUR); digit=InsertConst(strToken,K_w); cout<<'('<<digit<<",50"<<')'<<endl;} else if(IsJF(ch)) {intjfcount=Reservejf(ch,J_CHAR); cout<<'('<<ch<<','<<jfcount<<')'<<endl;} else if(IsYSF(ch)) {while(IsYSF(ch)) {strToken=strToken+ch; ch=fgetc(fp);} fseek(fp,-1L,SEEK_CUR); i=Reserveysf(strToken,YSF_W); if(i>-1)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綜合能源服務(wù)項目監(jiān)理合同(GF)
- 2025年度虛擬現(xiàn)實影視制作合同
- 2025-2030年可變色家居用品行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 2025年度城市燃?xì)夤艿朗┕ず贤P蘧S修與安全供應(yīng)保障條款
- 2025年度建筑工程材料員勞動合同規(guī)范范本
- 2025年度加氣塊磚節(jié)能環(huán)保技術(shù)創(chuàng)新合同范本
- 2025年度拱橋橋梁施工設(shè)備租賃合同
- 2025年度建筑安裝工程節(jié)能改造合同樣本
- 2025年度互聯(lián)網(wǎng)數(shù)據(jù)中心租賃合同標(biāo)的物服務(wù)等級保證協(xié)議
- 2025年度人工智能技術(shù)研發(fā)合同標(biāo)的合作書
- 中國太陽能光電建筑行業(yè)現(xiàn)狀調(diào)研分析及市場前景預(yù)測報告(2024版)
- 關(guān)于防范遏制礦山領(lǐng)域重特大生產(chǎn)安全事故的硬措施課件
- 2025年中國成都餐飲業(yè)市場運營態(tài)勢分析及投資前景預(yù)測報告
- 2024年xx縣第三小學(xué)安全工作管理制度匯編
- 2024年榆林職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試歷年參考題庫含答案解析
- 項目合作備忘錄范文
- 婦產(chǎn)科醫(yī)生個人年終述職報告課件
- 《費曼學(xué)習(xí)法》讀后感
- JGJ-T188-2009施工現(xiàn)場臨時建筑物技術(shù)規(guī)范
- DL∕T 1100.1-2018 電力系統(tǒng)的時間同步系統(tǒng) 第1部分:技術(shù)規(guī)范
- Interstellar-星際穿越課件
評論
0/150
提交評論