資源描述:
《詞法分析--實(shí)驗(yàn)報(bào)告》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、Al、實(shí)驗(yàn)?zāi)康模?:了解詞法分析器自動(dòng)牛成工具lex2:T解yacc和lex的相關(guān)運(yùn)用A2、實(shí)驗(yàn)要求:1.編寫lex程序,編譯牛成相應(yīng)的生成程序,生成程序從文本文件讀入檢測(cè)程序代碼,按照mini?C的詞法加以翻譯,將翻譯出的詞法記號(hào)分類標(biāo)記并在console輸出。2.閱讀lex自動(dòng)生成的C代碼,結(jié)合狀態(tài)轉(zhuǎn)換圖思考其進(jìn)行詞法分析的具體過程。根據(jù)口身閱讀情況,針對(duì)代碼中的一個(gè)或多個(gè)方面,比如狀態(tài)轉(zhuǎn)換算法、狀態(tài)機(jī)數(shù)據(jù)結(jié)構(gòu),進(jìn)行細(xì)致的分析,理解其實(shí)現(xiàn)手法,并以適當(dāng)?shù)男问綄懹趯?shí)驗(yàn)報(bào)告中。A3、實(shí)驗(yàn)內(nèi)容:一:了解mini-C的詞法1
2、mini-C語言的關(guān)鍵字:voidintfloatifelsewhileforreturnbreak2特殊符號(hào):&&II<=>===<>!==()+?*//**/3其他記號(hào)INT_NUM,FLOAT_NUM,ID定義如下:digit=[0-9]letter=[a-zA-Z]INT_NUM=[digit]+FLOAT_NUM=[digit]+.[digit]+ID=fletter]+[digitllletterllJ*4空白字符:delim=[“4tt]WHlTESPACE={delim)+5/*...*/為注輕部分
3、,該部分應(yīng)該宜接忽略,不加以翻譯。詞法分析器能夠把源程序的字符流翻譯成詞法記號(hào)流,木次實(shí)驗(yàn)利用詞法分析器自動(dòng)生成lex,翻譯基Fmini-C的源程序的符號(hào)流,把每個(gè)識(shí)別出的記號(hào)加以分類描述并輸出。注意:自己擴(kuò)充的一些內(nèi)容:增加關(guān)鍵字:scanf、printsmain方便程序測(cè)試。-:詞法分析器源程序:#include#includcintkeyWordCount=0;intspccialSymbolCount=0;intintNurnCount=0;intfloatNumCount=
4、0;intidCount=0;intcommcntCount=0;intstringCount=0;%}digit[0-91letterfa-zA-Z)keyWordvoidlintlfloatliflelselwhilelforlretumlbreaklprintflscanflmainspecialSymbol二T>=T=TvT>T!二T二T(T)T{T}T;T.T.T+T?T*T/T++T?」intNum{digit}+floatNum{digit}+.{digit}+id{lcttcr}+({lcttcr}l{
5、digit}l[」嚴(yán)dclim「5]whiteSpace{delim}+%%{keyWord}{{specialSymbol}{intNum}}{floatNum}{}{id}{keyWordCount++;printf(°kcyWord:%s”,yy(cx【);specialSymbolCount++;printf(HspecialSymbol:%s*yytcxt);}intNumCount++;printf(MintNum:%s",yytext);floalNumCounl++;printf(Hfl
6、oatNum:%sryytcxt);idCounl++;printf(Hid:%sryytext);W.*commcniCount++;"嚴(yán)y*廠]**VcommentCount++;{whiteSpace}{}stringCounl++;printf(Hsiring:%sM,yytcxl);%%intmain(intavgs,char*avgr[l){printf(,rl*****WclcomctousetheMini_CCompilcr!*****lM);yyin=fbpen(avgr[l]
7、,T);if(!yyin){return0;}yyiex();printf(,r*****Astatisticsofelementsinthefilc*****M);printf('Thereare%dkeyWord⑸?",keyWordCount);printf('Thereare%dspecialSymbol(s).u,specialSymbolCount);printf(*Thercarc%dintNunUs)?”,intNumCount);printf('Thereare%dnoalNum(s
8、).*HoatNumCount);printf(,Therearc%did(s).",idCount);primFCThereare%dcomment(s)An",commentCount);printfC'Thcrcarc%dstring(s).M,stringCount);printf(',**