




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
PAGE2PAGE2編譯原理實驗報告實驗一實驗題目:詞法分析指導老師:任姚鵬專業班級:計算機科學與技術系網絡工程方向1002班姓名:xxxx2013年4月13日實驗類型__驗證性__實驗室_軟件實驗室三__一、實驗項目的目的和任務:了解和掌握詞法分析的方法,編程實現給定源語言程序的詞法分析器,并利用該分析器掃描源語言程序的字符串,按照給定的詞法規則,識別出單詞符號作為輸出,發現其中的詞法錯誤。二、實驗內容:1.設計一個簡單的程序設計語言(語言中有若干運算符和分界符;有若干關健字;若干標識符及若干常數)2.確定編譯中使用的表格、詞法分析器的輸出形式、標識符與關鍵字的區分方法。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); //打印結果,關鍵字 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("(常數%d,%s)\n",3,tmp);//打印結果 index=idx-1; return1;} else {return0;}} elseif(IsNumber(file[idx])) //一串數字判斷 {while(IsNumber(file[idx])) tmp[i++]=file[idx++]; tmp[i++]=file[idx++]; tmp[i]='\0'; printf("(常數%d,%s)\n",3,tmp);//打印結果 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); //打印結果 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); //打印結果 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;}五、運行結果六、實驗總結實驗一是關于詞法分析
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東臨清2025年初三畢業班第一次模擬考試化學試題含解析
- 三亞市2025屆四下數學期末經典模擬試題含解析
- 山東省東平縣2024-2025學年中考適應性測試(二)語文試題含解析
- 上海立信會計金融學院《數字視頻基礎》2023-2024學年第一學期期末試卷
- 模電 第25講 非正弦波發生電路學習資料
- 模電 10-直流電源學習資料
- 上海濟光職業技術學院《團體心理輔導與訓練》2023-2024學年第一學期期末試卷
- 武漢商學院《微生物學與免疫學基礎》2023-2024學年第二學期期末試卷
- 工程制圖基礎 04第三章學習資料
- 山東省臨沂沂水縣聯考2024-2025學年初三復習診斷(二)生物試題含解析
- 二年級下冊遞等式計算練習400題及答案
- 高三下學期綜評自我陳述報告
- 國際人權法與非洲人權體系的重要案例研究
- 國有土地使用權的評估與出讓管理
- 2023年標準化工程師考試真題模擬匯編(共402題)
- 中建懸挑卸料平臺專項施工方案
- 中建總工程師的職業基本素養
- 【房地產項目成本控制問題研究文獻綜述2300字】
- 中等職業學校語文課程標準(2020年版)(word精排版)
- 《一般將來時》教學設計
- 小學數學-青島版五四制五年級數學上冊第七單元《比的意義》教學設計學情分析教材分析課后反思
評論
0/150
提交評論