版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
PAGE2PAGE2編譯原理實驗報告實驗一實驗題目:詞法分析指導老師:任姚鵬專業(yè)班級:計算機科學與技術系網(wǎng)絡工程方向1002班姓名:xxxx2013年4月13日實驗類型__驗證性__實驗室_軟件實驗室三__一、實驗項目的目的和任務:了解和掌握詞法分析的方法,編程實現(xiàn)給定源語言程序的詞法分析器,并利用該分析器掃描源語言程序的字符串,按照給定的詞法規(guī)則,識別出單詞符號作為輸出,發(fā)現(xiàn)其中的詞法錯誤。二、實驗內(nèi)容:1.設計一個簡單的程序設計語言(語言中有若干運算符和分界符;有若干關健字;若干標識符及若干常數(shù))2.確定編譯中使用的表格、詞法分析器的輸出形式、標識符與關鍵字的區(qū)分方法。3.把詞法分析器設計成一個獨立的過程。三、實驗要求:1.從鍵盤上輸入源程序;2.處理各單詞,計算個單詞的值和類型;3.輸出個單詞名、單詞的值和類型。四、實驗代碼#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) //關鍵字和標示符識別{ 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("(關鍵字%d,%s)\n",1,tmp); //打印結(jié)果,關鍵字 index=idx-1; //新的index的值 return1; } } return0;}intIsConst(intidx) { chartmp[30]; inti=0; if(IsChar(file[idx])&&(file[idx-1]=='\'')) //單個字符判斷{ if(file[idx+1]=='\'') //是單個的字符 {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])) //一串數(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) //是否是標示符{ chartmp[30]; inti=0; if(IsKeyWord(idx))//是關鍵字就不做處理 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("(標示符%d,%s)\n",2,tmp); //打印結(jié)果 index=idx-1; return1;}intIsOperator(intidx) //是否是運算符 {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("(運算符%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)) //考查是不是關鍵字 {} elseif(IsConst(index)) {} elseif(IsWord(index)) //考查是不是符號 {} elseif(IsLimit(index)) {} elseif(IsOperator(index)) {} index++; //考查下一個字符} return0;}五、運行結(jié)果六、實驗總結(jié)實驗一是關于詞法分析
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人民版道德與法治九年級上冊3.2《將關愛傳遞》聽課評課記錄1
- 人教版八年級地理下冊三環(huán)一體式導學助聽課評課記錄《第六章 北方地區(qū)》
- 湘教版數(shù)學九年級下冊1.5《二次函數(shù)的應用》聽評課記錄1
- 統(tǒng)編版七年級下冊道德與法治第四課 揭開情緒的面紗 聽課評課記錄
- 2022年新課標八年級上冊道德與法治《6.2 做負責人的人 》聽課評課記錄
- 小學二年級上冊口算練習題
- 八年級下學期工作總結(jié)
- 五年級上冊數(shù)學口算500題
- 滬科版數(shù)學八年級下冊《中位數(shù)和眾數(shù)》聽評課記錄1
- 合作社管理分紅協(xié)議書范本
- 《突發(fā)事件應對法》考試題庫150題(含答案)
- 2025-2030年中國汽車用鉛酸蓄電池市場發(fā)展趨勢展望與投資策略分析報告
- cpk自動計算電子表格表格
- 《滅火器維修》GA95-2015(全文)
- 皮膚科疑難病例討論課件
- 通信系統(tǒng)防雷與接地下篇的知識
- Q∕GDW 12118.2-2021 人工智能平臺架構及技術要求 第2部分:算法模型共享應用要求
- 管理者完成目標的五步19法姜洋講義
- 亳州市污水處理廠工藝設計
- 復查(復核)信訪事項流程圖
- 機動車駕駛員培訓學校管理制度匯編
評論
0/150
提交評論