![詞法分析報告器實驗報告材料_第1頁](http://file4.renrendoc.com/view/7b4ca795632136626b9044ec4507a36c/7b4ca795632136626b9044ec4507a36c1.gif)
![詞法分析報告器實驗報告材料_第2頁](http://file4.renrendoc.com/view/7b4ca795632136626b9044ec4507a36c/7b4ca795632136626b9044ec4507a36c2.gif)
![詞法分析報告器實驗報告材料_第3頁](http://file4.renrendoc.com/view/7b4ca795632136626b9044ec4507a36c/7b4ca795632136626b9044ec4507a36c3.gif)
![詞法分析報告器實驗報告材料_第4頁](http://file4.renrendoc.com/view/7b4ca795632136626b9044ec4507a36c/7b4ca795632136626b9044ec4507a36c4.gif)
![詞法分析報告器實驗報告材料_第5頁](http://file4.renrendoc.com/view/7b4ca795632136626b9044ec4507a36c/7b4ca795632136626b9044ec4507a36c5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1/13 詞法分析器設(shè)計自動機、正規(guī)文法、正規(guī)式序能和輸出形式符號程序語言的單詞符號一般分為以下五種:關(guān)鍵字、標識符、常數(shù)、運算符,3.輸出的單詞符號的表示形式:4.詞法分析器的結(jié)構(gòu)預(yù)處理子程序掃描緩沖區(qū)輸入緩沖區(qū)掃描器詞符號圖實現(xiàn)2/13 字符/數(shù)字**2數(shù)字*45<>6*字符/數(shù)字錯誤:錯誤其他開始字符其他數(shù)字07==計名*/stringGetWordstringstrintiintj除去字符串中連續(xù)的空格和換行ullstringstrintiboolIsBoundary(stringstr,inti);boolIsOperation(stringstr,inti);3/13 vc是否為關(guān)鍵字,是的話,返回真,反之返回假*/assWordAnalyzer{liccharContent[MAXLENGTH];intval;voidprint();};r序PrintError,顯示當前掃描到的字符與其所在行、列位置,并跳過該字符重#include<iostream>#include<vector>#include<string>#include<fstream>usingnamespacestd;/*用來存儲目標文件名*/4/13 stringfile_name;stringGetText();/*獲得一個單詞符號,從位置i開始查找。//并且有一個引用參數(shù)j,用來返回這個單詞最后一個字符在str的位置。*/stringGetWord(stringstr,inti,int&j);/*這個函數(shù)用來除去字符串中連續(xù)的空格和換行//第一個參數(shù)為目標字符串,第二個參數(shù)為開始位置//返回值為連續(xù)的空格和換行后的第一個有效字符在字符串的位置*/intDeleteNull(stringstr,inti);/*判斷i當前所指的字符是否為一個分界符,是的話返回真,反之假*/boolIsBoundary(stringstr,inti);/*判斷i當前所指的字符是否為一個運算符,是的話返回真,反之假*/boolIsOperation(stringstr,inti);/*此函數(shù)將一個pair數(shù)組輸出到一個文件中*/voidOutFile(vector<pair<int,string>>v);/*次函數(shù)將參數(shù)str,digit添加到temp中*/voidadd(stringstr,intdigit,vector<pair<int,string>>temp);/*此函數(shù)承受一個字符串數(shù)組,對它進展詞法分析,返回一個pair型數(shù)組*/vector<pair<int,string>>analyst(vector<string>vec);,是的話,返回真,反之返回假*/5/13 boolIsKey(stringstr);intmain(){cout<<"*********************************************************\n";cout<<"*************編譯原理課程設(shè)計--詞法編譯器ver1.0*********\n";cout<<"*********************************************************\n";cout<<endl;string1="";string2="\n";stringfileline=GetText();intbegin=0,end=0;vector<string>array;{begin=DeleteNull(fileline,begin);stringnowString;nowString=GetWord(fileline,begin,end);if(end==-1)break;if(nowString.pare(1)&&nowString.pare(2))array.push_back(nowString);begin=end+1;}while(true);vector<pair<int,string>>mid_result;mid_result=analyst(array);OutFile(mid_result);cout<<"*********************************************************\n";cout<<"*********************************************************\n";6/13 system("pause");return0;}/stringGetText(){stringfile_name1;cin>>file_name1;ifstreaminfile(file_name1.c_str(),ios::in);if(!infile){"<<file_name1.c_str()<<"!!!"<<endl;exit(-1);}cout<<endl;charf[1000];infile.getline(f,1000,EOF);infile.close();printf(f);cout<<endl;returnf;}符號,從位置i開始查找。stringGetWord(stringstr,inti,int&j){stringno_use("(){},;\n+=*/-<>\"");j=str.find_first_of(no_use,i);if(j==-1)return"";if(i!=j)j--;returnstr.substr(i,j-i+1);7/13 }/*這個函數(shù)用來除去字符串中連續(xù)的空格和換行//第一個參數(shù)為目標字符串,第二個參數(shù)為開始位置//返回值為連續(xù)的空格和換行后的第一個有效字符在字符串的位置*/intDeleteNull(stringstr,inti){for(;;i++)if(str[i]!=''&&str[i]!='\n')returni;}boolIsBoundary(stringstr,inti){intt;chararr[7]={',',';','{','}','(',')',':'};for(t=0;t<7;t++)if(str[i]==arr[t])returntrue;returnfalse;}/*判斷i當前所指的字符是否為一個運算符,是的話返回真,反之假*/boolIsOperation(stringstr,inti){intt;chararr[8]={'+','-','*','/','=','<','>','&'};for(t=0;t<8;t++)if(str[i]==arr[t])returntrue;returnfalse;}/voidOutFile(vector<pair<int,string>>v){8/13 cin>>file_name;ofstreamoutfile(file_name.c_str(),ios::out);if(!outfile){"<<file_name.c_str()<<"!!!"<<endl;exit(-1);}cout<<endl;inti;for(i=0;i<v.size();i++){outfile<<"<"<<v[i].first<<",\""<<v[i].second<<"\">"<<endl;cout<<"<"<<v[i].first<<",\""<<v[i].second<<"\">"<<endl;}outfile<<"\n\n*********************************\n";outfile.close();return;}boolIsKey(stringstr){stringp[7]={"main","int","char","if","else","for","while"};vector<string>ppp(p,p+7);intu;for(u=0;u<ppp.size();u++)if(!str.pare(ppp[u]))returntrue;returnfalse;}/*此函數(shù)承受一個字符串數(shù)組,對它進展詞法分析,返回一個pair型數(shù)組*/vector<pair<int,string>>analyst(vector<string>vec){vector<pair<int,string>>temp;inti;for(i=0;i<vec.size();i++)9/13 {if(vec[i].size()==1){if(vec[i]==">"&&vec[i+1]=="="){stringjk=vec[i];jk.append(vec[++i],0,1);pair<int,string>pp(37,jk);temp.push_back(pp);continue;}if(vec[i]=="<"&&vec[i+1]=="="){stringjk=vec[i];jk.append(vec[++i],0,1);pair<int,string>pp(38,jk);temp.push_back(pp);continue;}if(vec[i]=="="&&vec[i+1]=="="){stringjk=vec[i];jk.append(vec[++i],0,1);pair<int,string>pp(39,jk);temp.push_back(pp);continue;}if(vec[i]=="!"&&vec[i+1]=="="){stringjk=vec[i];jk.append(vec[++i],0,1);pair<int,string>pp(40,jk);temp.push_back(pp);continue;}if(vec[i]=="&"&&vec[i+1]=="&"){stringjk=vec[i];jk.append(vec[++i],0,1);pair<int,string>pp(42,jk);temp.push_back(pp);continue;}if(vec[i]=="|"&&vec[i+1]=="|")/13 {stringjk=vec[i];jk.append(vec[++i],0,1);pair<int,string>pp(43,jk);temp.push_back(pp);continue;}if(IsBoundary(vec[i],0)){if(vec[i]==","){pair<int,string>pp1(32,vec[i]);temp.push_back(pp1);}if(vec[i]==";"){pair<int,string>pp2(34,vec[i]);temp.push_back(pp2);}if(vec[i]=="{"){pair<int,string>pp3(30,vec[i]);temp.push_back(pp3);}if(vec[i]=="}"){pair<int,string>pp4(31,vec[i]);temp.push_back(pp4);}if(vec[i]=="("){pair<int,string>pp5(26,vec[i]);temp.push_back(pp5);}if(vec[i]==")"){pair<int,string>pp6(27,vec[i]);temp.push_back(pp6);}if(vec[i]==":"){pair<int,string>pp7(33,vec[i]);temp.push_back(pp7);} }elseif(IsOperation(vec[i],0)){if(vec[i]=="+"){pair<int,string>pp8(22,vec[i]);temp.push_back(pp8);}if(vec[i]=="-"){pair<int,string>pp9(23,vec[i]);temp.push_back(pp9);}if(vec[i]=="*"){pair<int,string>pp10(24,vec[i]);temp.push_back(pp10);}if(vec[i]=="/"){pair<int,string>pp11(25,vec[i]);temp.push_back(pp11);}if(vec[i]=="="){pair<int,string>pp12(21,vec[i]);temp.push_back(pp12);}if(vec[i]==">"){pair<int,string>pp13(35,vec[i]);temp.push_back(pp13);}if(vec[i]=="<"){pair<int,string>pp14(36,vec[i]);temp.push_back(pp14);}if(vec[i]=="&"){pair<int,string>pp26(41,vec[i]);temp.push_back(pp26);}} elseif(vec[i][0]<='9'&&vec[i][0]>='0'){pair<int,string>pp24(10,vec[i]);temp.push_back(pp24);}else{pair<int,string>pp25(10,vec[i]);temp.push_back(pp25);}}elseif(vec[i][0]<='9'&&vec[i][0]>='0'){pair<int,string>pp23(3,vec[i]);temp.push_back(pp23);}elseif(IsKey(vec[i])){if(vec[i]=="main"){pair
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二手房按揭買房買賣合同
- 國際公路運輸合同范本
- 2025船舶買賣合同書樣本版
- 提高創(chuàng)新能力的技能培訓(xùn)
- 提高人際關(guān)系的培訓(xùn)課程
- 品牌服務(wù)合同范本
- 2024年公共事業(yè)領(lǐng)域投資合同
- 吊車零租賃合同范本
- 鋼釘鐵釘售賣合同
- 2025有限責(zé)任公司銀行貸款擔(dān)保合同
- 2025年中國黃芪提取物市場調(diào)查研究報告
- 安徽省定遠重點中學(xué)2024-2025學(xué)年第一學(xué)期高二物理期末考試(含答案)
- 七年級英語閱讀理解55篇(含答案)
- 老客戶維護方案
- 高處作業(yè)安全教育培訓(xùn)講義課件
- dk膠原蛋白培訓(xùn)課件
- 萬科物業(yè)管理公司全套制度(2016版)
- 動物檢疫技術(shù)-動物檢疫處理(動物防疫與檢疫技術(shù))
- 英語經(jīng)典口語1000句
- 進模模具設(shè)計
- 2021年高考化學(xué)真題和模擬題分類匯編專題20工業(yè)流程題含解析
評論
0/150
提交評論