資源描述:
《【精品】實驗1詞法分析》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、%1.實驗目的:通過設計調試詞法分析程序,實現從源程序中分出各種單詞的方法;加深對課堂教學的理解;提高詞法分析方法的實踐能力。%1.實驗要求:(1)掌握詞法分析的實現方法。(2)上機調試編出的詞法分析程序。(3)源程序可以從鍵盤輸入也可以事先存在文件中(4)將源程序中的各個單詞讀出后可以顯示在屏幕中也可以存在文件中(包括單詞的類別)%1.實驗題目:用C/C++語言編寫以下C/C++子集的詞法分析程序。%1.程序代碼:#includo^include#include^includeusingn
2、amespacestd;/*By舒婷廠_“*/structWORD//存單詞;{charWORDchar[100];//存串.intsign;//存類型.intid;//編號};vectoransright,answrong;vectorQ;charwords[9][10]={"VAR","INTEGER","BEGIN","END","IF","THEN","ELSE","WHILE","DO"};〃標識符charother[12]=C;〃普通符號charotherl[4][10X2,X"?","=};//遇到〈>:特殊符號情況〃由丁?編寫
3、后發(fā)現寫了太多函數,固上用聲明,函數放最下;boo1bool_ch(charx);//分割單詞的符號?intbool_word(chtir*x);//單詞?intboolnum(char*x);//整數?voidshowdetail(char*a);//符號詳細分類,后來補上的..voidGet_type(WORDa);//類型?intready_right(char*x)://是否存在過?intready_wrong(char*x);//是否存在過?boolboololh2(charxl,charx2);//是不是特殊符號?intmainO//主函數{charx
4、tlOOO];charstr[1000];//容器初始化ans_right.clear();dnswrong,clear();Q.clear();intnum_right=0,numwrong=0;inti;while(gets(x)){intlenl=strlen(x),len2;for(i=0;i=‘A'&&x[i]〈='Z')//保留字or標示符or錯誤串{str[len2++]=x[i];while(!bool_ch(x[i+l])&&i+l5、len2]=0;intfl=readyright(str),f2=readywrong(str);boolflag二false;if(fl==-l&&f2==-l)//沒有存在過{intstrtype=boolword(str);if(str_typc)//保留字or標示符{WORDt;numright++;strcpy(t.WORDchar,str);t?sign=str_type;t?id二num_right;ans_right?push_back(t);flag=lrue;}else//錯誤串{WORDt;numwrong++;strepy(t.WORD_c
6、har,str);t.sign=str_type;t.id二num_wrong:answrong.pushback(t);}}if(fl!=-l){fl++;Q.pushback(fl);}if(flag)Q.pushback(numright);)elseif(x[i]>=0,&&x[i]<=95)//整數串or錯誤串{str[len2++]=x[i];if(i!=lenl-l){wh訂e(!bool_ch(x[i+l])&&i+l7、=readywrong(str);boolflag=false;if(fl==-l&&f2==-l)//沒有存在過intstr_type=bool_num(str):if(str_type)//整數串WORDt;num_right++;strcpy(t.W0RD_char,str);sign=strtype;id二numright;ans_right?push_back(t);flag-true;)else//錯謀串{WORDt;num_wrong++;strcpy(t.WORDchar,str);t.sign=strtype;t?id二numwrong;ans_
8、wrong