资源描述:
《词法分析--实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Al、实验目的:1:了解词法分析器自动牛成工具lex2:T解yacc和lex的相关运用A2、实验要求:1.编写lex程序,编译牛成相应的生成程序,生成程序从文本文件读入检测程序代码,按照mini・C的词法加以翻译,将翻译出的词法记号分类标记并在console输出。2.阅读lex自动生成的C代码,结合状态转换图思考其进行词法分析的具体过程。根据口身阅读情况,针对代码中的一个或多个方面,比如状态转换算法、状态机数据结构,进行细致的分析,理解其实现手法,并以适当的形式写于实验报告中。A3、实验内容:一:了解mini-C的词法1
2、mini-C语言的关键字:voidintfloatifelsewhileforreturnbreak2特殊符号:&&II<=>===<>!==()+・*//**/3其他记号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、,该部分应该宜接忽略,不加以翻译。词法分析器能够把源程序的字符流翻译成词法记号流,木次实验利用词法分析器自动生成lex,翻译基Fmini-C的源程序的符号流,把每个识别出的记号加以分类描述并输出。注意:自己扩充的一些内容:增加关键字:scanf、printsmain方便程序测试。-:词法分析器源程序:#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[」严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*厂]**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(',**