版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGE2PAGE2編譯原理實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)一實(shí)驗(yàn)題目:詞法分析指導(dǎo)老師:任姚鵬專業(yè)班級(jí):計(jì)算機(jī)科學(xué)與技術(shù)系網(wǎng)絡(luò)工程方向1002班姓名:xxxx2013年4月13日實(shí)驗(yàn)類型__驗(yàn)證性__實(shí)驗(yàn)室_軟件實(shí)驗(yàn)室三__一、實(shí)驗(yàn)項(xiàng)目的目的和任務(wù):了解和掌握詞法分析的方法,編程實(shí)現(xiàn)給定源語言程序的詞法分析器,并利用該分析器掃描源語言程序的字符串,按照給定的詞法規(guī)則,識(shí)別出單詞符號(hào)作為輸出,發(fā)現(xiàn)其中的詞法錯(cuò)誤。二、實(shí)驗(yàn)內(nèi)容:1.設(shè)計(jì)一個(gè)簡(jiǎn)單的程序設(shè)計(jì)語言(語言中有若干運(yùn)算符和分界符;有若干關(guān)健字;若干標(biāo)識(shí)符及若干常數(shù))2.確定編譯中使用的表格、詞法分析器的輸出形式、標(biāo)識(shí)符與關(guān)鍵字的區(qū)分方法。3.把詞法分析器設(shè)計(jì)成一個(gè)獨(dú)立的過程。三、實(shí)驗(yàn)要求:1.從鍵盤上輸入源程序;2.處理各單詞,計(jì)算個(gè)單詞的值和類型;3.輸出個(gè)單詞名、單詞的值和類型。四、實(shí)驗(yàn)代碼#include<stdio.h>#include<string.h>charfile[1024];intlength=0;intindex; charkeywords[][10]={"auto","short","int","long","float", "double","char","struct","union","enum", "typedef","const","unsigned","signed","extern", "register","static","volatile","void","default", "if","else","switch","case","for", "do","while","goto","continue","break", "sizeof","return"};charlimits[]={'(',')','[',']','{','}',',',';'}; charoperators[]={'+','-','*','/','%', '>','<','&','|','^', '~','!','='}; //13intIsChar(charch) //是否是字符{ if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) return1; return0;}intIsNumber(charch) { if((ch>='0'&&ch<='9')) return1; return0;}intIsKeyWord(intidx) //關(guān)鍵字和標(biāo)示符識(shí)別{ chartmp[30]; inti=0; while(IsChar(file[idx]))tmp[i++]=file[idx++]; //將單詞拷貝 tmp[i]='\0'; if(i==0) return0; for(i=0;i<32;i++) { if(0==strcmp(keywords[i],tmp)) //相等 { printf("(關(guān)鍵字%d,%s)\n",1,tmp); //打印結(jié)果,關(guān)鍵字 index=idx-1; //新的index的值 return1; } } return0;}intIsConst(intidx) { chartmp[30]; inti=0; if(IsChar(file[idx])&&(file[idx-1]=='\'')) //單個(gè)字符判斷{ if(file[idx+1]=='\'') //是單個(gè)的字符 {tmp[i++]=file[idx++]; tmp[i]='\0'; printf("(常數(shù)%d,%s)\n",3,tmp);//打印結(jié)果 index=idx-1; return1;} else {return0;}} elseif(IsNumber(file[idx])) //一串?dāng)?shù)字判斷 {while(IsNumber(file[idx])) tmp[i++]=file[idx++]; tmp[i++]=file[idx++]; tmp[i]='\0'; printf("(常數(shù)%d,%s)\n",3,tmp);//打印結(jié)果 index=idx-1; return1;} return0;}intIsWord(intidx) //是否是標(biāo)示符{ chartmp[30]; inti=0; if(IsKeyWord(idx))//是關(guān)鍵字就不做處理 return0; if(IsConst(idx)) //是常量不做處理 return0; if((file[idx]=='_')||(IsNumber(file[idx]))||(IsChar(file[idx]))) tmp[i++]=file[idx++]; if(i==0)return0; while((IsNumber(file[idx]))||(IsChar(file[idx]))) tmp[i++]=file[idx++]; //將單詞拷貝 tmp[i]='\0'; printf("(標(biāo)示符%d,%s)\n",2,tmp); //打印結(jié)果 index=idx-1; return1;}intIsOperator(intidx) //是否是運(yùn)算符 {chartmp[30]; intk=0; inti=0; for(k=0;k<13;k++){if(operators[k]==file[idx]) { tmp[i++]=file[idx]; index=idx; if((file[idx+1]=='=')|| ((file[idx]=='+')&&(file[idx+1]=='+'))|| ((file[idx]=='-')&&(file[idx+1]=='-'))) { tmp[i++]=file[++idx]; index=idx; } tmp[i]='\0'; printf("(運(yùn)算符%d,%s)\n",4,tmp); //打印結(jié)果 return1;}} return1;}intIsLimit(intidx) //限界符{ inti; for(i=0;i<8;i++) { if(limits[i]==file[idx]) { printf("(界限符%d,%c)\n",4,file[idx]); return1;}} return0;}intReadFile(char*name){ inti=0; intlength; charch; FILE*fp=fopen(name,"r"); if(fp==NULL) { printf("can'topenfile%s\n",name); return-1;} length=0; while((ch=fgetc(fp))!=EOF) file[length++]=ch; for(i=0;i<length;i++) putchar(file[i]); fclose(fp); returnlength;}intmain(){ if((length=ReadFile("TestDemo.c"))==-1) //讀取文件失敗 return-1; index=0; while(index<length) { while((file[index]=='')&&(index<length))index++; //去除空格 if(index>=length)return0; if(IsKeyWord(index)) //考查是不是關(guān)鍵字 {} elseif(IsConst(index)) {} elseif(IsWord(index)) //考查是不是符號(hào) {} elseif(IsLimit(index)) {} elseif(IsOperator(index)) {} index++; //考查下一個(gè)字符} return0;}五、運(yùn)行結(jié)果六、實(shí)驗(yàn)總結(jié)實(shí)驗(yàn)一是關(guān)于詞法分析
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 與打印店簽訂合同協(xié)議書
- 中草藥種植的農(nóng)業(yè)國際合作案例分析考核試卷
- 人工智能在游戲開發(fā)中的應(yīng)用考核試卷
- 公共設(shè)施管理的城市治理模式考核試卷
- 印刷業(yè)智能制造技術(shù)考核試卷
- 5《大學(xué)之道》說課稿 2024-2025學(xué)年統(tǒng)編版高中語文選擇性必修上冊(cè)
- 2025年北師大新版八年級(jí)物理上冊(cè)階段測(cè)試試卷
- 光學(xué)玻璃的快速冷卻與熱處理優(yōu)化考核試卷
- 互動(dòng)廣告與用戶參與考核試卷
- 個(gè)性化廣告制作協(xié)議2024年版版
- 2024年醫(yī)師定期考核臨床業(yè)務(wù)知識(shí)考試題庫及答案(共三套)
- 2014新PEP小學(xué)英語六年級(jí)上冊(cè)-Unit5-What-does-he-do復(fù)習(xí)課件
- 建筑材料供應(yīng)鏈管理服務(wù)合同
- 孩子改名字父母一方委托書
- 2024-2025學(xué)年人教版初中物理九年級(jí)全一冊(cè)《電與磁》單元測(cè)試卷(原卷版)
- 江蘇單招英語考綱詞匯
- 2024年事業(yè)單位財(cái)務(wù)工作計(jì)劃例文(6篇)
- 2024年工程咨詢服務(wù)承諾書
- 青桔單車保險(xiǎn)合同條例
- 車輛使用不過戶免責(zé)協(xié)議書范文范本
- 2023-2024學(xué)年天津市部分區(qū)九年級(jí)(上)期末物理試卷
評(píng)論
0/150
提交評(píng)論