袁德的編譯原理實驗報告

袁德的編譯原理實驗報告

ID:18439681

大小:123.50 KB

頁數(shù):30頁

時間:2018-09-17

袁德的編譯原理實驗報告_第1頁
袁德的編譯原理實驗報告_第2頁
袁德的編譯原理實驗報告_第3頁
袁德的編譯原理實驗報告_第4頁
袁德的編譯原理實驗報告_第5頁
資源描述:

《袁德的編譯原理實驗報告》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫

1、實驗一:詞法分析程序的主要任務(wù)一實驗?zāi)康氖煜ち私庠~法分析二實驗環(huán)境Windowsvcc++編程語言三實驗內(nèi)容1.讀源程序,產(chǎn)生單詞符號2.詞法分析程序的其他任務(wù):3.濾掉空格,跳過注釋、換行符4.追蹤換行標(biāo)志,復(fù)制出錯源程序,5.宏展開實驗源代碼如下:#include#include#include#include#includeusingnamespacestd;ifstreamfp("d:/source.txt",ios::in);//source.tx

2、t內(nèi)容是代碼本身charcbuffer;char*key[13]={"if","else","for","while","do","return","break","continue","int","void","main","const","printf"};//關(guān)鍵字char*border[7]={",",";","{","}","(",")","http://"};//分界符char*arithmetic[6]={"+","-","*","/","++","--"};//運算符char*relation[7]={"<","<=","=",">",">=",

3、"==","!="};//關(guān)系運算符char*lableconst[80];//標(biāo)識符intconstnum=40;intlableconstnum=0;intlinenum=1;//統(tǒng)計常數(shù)和標(biāo)識符數(shù)量intsearch(charsearchchar[],intwordtype){inti=0,t=0;switch(wordtype){case1:{for(i=0;i<=12;i++)//關(guān)鍵字{if(strcmp(key[i],searchchar)==0)return(i+1);}return(0);}case2:{for(i=0;i<=6;i+

4、+)//分界符{if(strcmp(border[i],searchchar)==0)return(i+1);}return(0);}case3:{for(i=0;i<=5;i++)//運算符{if(strcmp(arithmetic[i],searchchar)==0)return(i+1);}return(0);}case4:{for(i=0;i<=6;i++)//關(guān)系運算符{if(strcmp(relation[i],searchchar)==0)return(i+1);}return(0);}case5:{for(t=40;t<=constnu

5、m;t++)//常數(shù){if(strcmp(searchchar,lableconst[t])==0)//判斷該常數(shù)是否已出現(xiàn)過return(t+1);}lableconst[t-1]=(char*)malloc(sizeof(searchchar));//為新的元素分配內(nèi)存空間strcpy(lableconst[t-1],searchchar);//為數(shù)組賦值lableconst指針數(shù)組名constnum++;//常數(shù)個數(shù)自加return(t);}case6:{for(i=0;i<=lableconstnum;i++){if(strcmp(search

6、char,lableconst[i])==0)//判斷標(biāo)識符是否已出現(xiàn)過return(i+1);}lableconst[i-1]=(char*)malloc(sizeof(searchchar));strcpy(lableconst[i-1],searchchar);lableconstnum++;//標(biāo)識符個數(shù)自加return(i);}default:cout<<"錯誤!";}}charalphaprocess(charbuffer)//字符處理過程{intatype;inti=-1;charalphatp[20];while((isalpha(bu

7、ffer))

8、

9、(isdigit(buffer)))//這兩個函數(shù)分別是判字符和判數(shù)字函數(shù)位于ctype.h中{alphatp[++i]=buffer;fp.get(buffer);}alphatp[i+1]='