还剩7页未读,继续阅读
文本内容:
实验报告实验项目名称用构造子集词法分析器lex c学时:学时2—.实验目的和要求用构造子集词法分析器,能实现识别子集源程序的单词序列lex c c二.实验环境VC/tc dos三.实验过程使用方法在“运行“中输入进入环A:lex1cmd dos境进入所在文件夹2LEX命令若在盘根目录下cd LEXfcd lexE任务book c语言教材翁写Iflash个文HicrosoftWindowsXP
5.
1.2600]文版权所有C1985-2001MicrosoftCorp.件件件F\cdlex的,F:\LEX文jrmriaiininrHFmiiin、c C:\fIRD01S\systeB32\cmd.exeC:\DocunentsandSettings\Adninistratorf使用步骤(直接在屏幕显示词法分析结果,3LEX不保留的)、编写源程序,如将与保1LEX“LL”,“LL”FLEX.EXE存在同一文件夹下、进入环境所在文件夹,运行2DOS FLEX.EXE程序FLEX.EXEo、用打开程序,编译后产生4VC“LEXYY.C”FLEX
1.L、运行后,产生程序3FLEX“LEXYY.C”程序“LEXYY.EXE”、进入环境所在文件夹,编写5DOS LEXYY.EXE”程序,运行程序Lc“LEXYY.EXE”的结果LEXYY.EXE l.c:国之•二WV%”尊jlKA二MN Z.二.,、声
4.
7.二声彳与}工三式\二个^二彳)二个/77Z-o源程序实现功能将所有小写字母转换成大写LL%#include stdio.h%n,,,,,[a-z]printf%c\yytext[O]+A-a;%%main argc,argv int argc;char**argv;++argv,—argc;/*skip overprogram name*/ifargc0存放的输入源程yyin=fopen argv
[0]nrn;//yyin LEXYY9elseyyin=stdin;++argv,-argc;/*skip overinput name*/ifargc0存放的输出程yyout=fopen argv
[0],nwn;//yyout LEXYYelseyyout=stdout;;yyiexint yywrapOreturn1;构造子集词法分析器B:c、编写子集的源程序,如力,将力与保存在同一文件夹下1c LEXex.L ex.L”FLEX.EXE、运行程序2FLEX.EXE、运行后,产生程序3FLEX“LEXYY.C”、用打开程序,编译后产生程序4VC“LEXYYC”“LEXYYEXE”、编写一个子集源程序每个人的源程序不相同5c A.c maininta;real b;a=2*32;b=
3.124;运行丫丫£*可程序“1^看词法分析的结果LEXYY.EXE A.c四实验结果将词法分析的结果抄到实验报告五错误分析由于该词法分析程序是分析子集,等关键字不能识别,字符型不能识别,部分运算c case符号和界符不能识别编写源程序需注意子集范围cc源程序Lexl.L%#include stdio.h#ifndef FALSE#define FALSE0#endif#ifndefTRUE#dcfinc TRUE1#endif%digit[0-9]number{digit}+[a-zA-Z]{letter}+[\n][\t]+letter identifiernewline whitespace%%printfHbaoliuzi:%s\nn,yytext;printfHbaoliuzi:%s\n,yytext;else printfCbaoliuzi:%s\nn,yytext;,for printfHbaoliuzi:%s\n,yytext;whileprintfnbaoliuzi:%s\n\yytext;do”printfHbaoliuzi:%s\n\yytext;,int”printfnbaoliuzi:%s\nn,yytext;»_»»printfHyunsuanfu:%s\n,yytext;printfMyunsuanfu:%s\n,yytext;printfHyunsuanfu:%s\nn,yytext;printfHyunsuanfu:%s\nn,yytext;printfHyunsuanfu:%s\nH,yytext;printfyunsuanfu:%s\n,yytext;printfHyunsuanfu:%s\nn,yytext;printfnjiefu:%s\n”,yytext;printfjiefu:%s\n”,yytext;T printfnjiefu:%s\n,yytext;,丁printfnjiefu:%s\n\yytext;printfnjiefu:%s\n”,yytext;printfjiefu:%s\n”,yytext;»».n printfnjiefu:%s\n\yytext;*printfHjiefu:%s\n”,yytext;ifniprintfnjiefu:%s\n,yytext;printfyunsuanfu:%s\n;yytext;printfnyunsuanfu:%s\n;yytextmain”;‘printfyunsuanfu:%s\n\yytext二;,!=;printfyunsuanfu:%s\n\yytext{number}{identifier}{whitespace}”/*{char c;printfnint:%s length:%d\n,yytext,yyleng;〃求数字的长度print*id:%s\nn,yytext;{/*skip whitespace*/}int done=FALSE;do二{while cinput!=*;while c=input==if c==7done=TRUE;\printfHyunsuanfu:%s\nn,yytext;printfCJiefu:%s\nn,yytext;}while!done;.{fprintfyyout/%s,%s\n“,*,ERROR,,,yytext;}%%main argc,argv intargc;char**argv;++argv,-argc;/*skip overprogram name*/ifargc0存放的输入源程序yyin=fopen argv
[0],;//yyin LEXYYelseyyin=stdin;++argv,-argc;/*skip overinput name*/ifargc0yyout=fopen argv
[0],wH;//yyout存放LEXYY的输出程序elseyyout=stdout;;yyiexint yywrapOreturn1;思考题该源程序中只给出了标识符符定义为字母,如何将规则改为识别字母数字的?1参照整型变量的定义,怎样将实型变量定义出来?2完善定义部分3附录若需要将词法分析器结果作为文件保留起来的,则需要修改程序使用步骤(需要将词法分析器结果保留起来的)LEX、编写源程序,如,将与保存在同一文件夹下1LEX“Cffk.l“Cffk.l”FLEX.EXE、进入环境所在文件夹,运行程序2DOS FLEX.EXE FLEX.EXE FLEXcffx.l、运行后,产生程序3FLEX“LEXYY.C”、用打开程序,编译后产生程序4VC“LEXYYC”“LEXYYEXE”、编写子集语言源程序,保存为并与保存在同一文件夹下5C A.TEST,“LEXYYEXE”、进入环境所在文件夹,运行程序6DOS LEXYY.EXE”“LEXYY.EXE”LEXYY.EXE A.TEST B.TXT、打开看词法分析的结果7“B.TXTL源程序Cffx.l%#include stdio.h#ifndef FALSE#define FALSE0#endif#ifndefTRUE#define TRUE1#endif%digit[0-9]number{digit}+letter[a-zA-Z]identifier{letter}+newline[\n]whitespace[\t]+%%if1{fprintfyyout,H%s%s\nH,yytext,yytext;}else”{fprintfyyout,n%s%s\nn,y ytext,yy text;}nforn{fprintfyyout,H%s%s\nH,y ytext,yy text;}while”{fprintfyyout,H%s%s\n\yytext,yytext;}Hdon{fprintfyyout,n%s%s\n,yytext,yytext;}int”{fprintfyyout,M%s%s\nn,y ytext,yy text;}{fprintfyyout,H%s%s\nn,yytext,yytext;}{fprintfyyout/%s%s\nH,yytext,yytext;}itti{fprintfyyout,n%s%s\n”,y ytext,yy text;}叫”{fprintfyyout,M%s%s\nn,yytext,yytext;}{fprintfyyout,n%s%s\nH,yytext,yytext;}{fprintfyyout/%s%s\nH,yytext,yytext;}y{fprintfyyout,n%s%s\nH,yytext,yytext;}{fprintfyyout,H%s%s\n\y ytext,yy text;}{fprintfyyout,H%s%s\nH,y ytext,yy text;},,y.{fprintfyyout,n%s%s\nH,y ytext,yy text;T{fprintfyyout,%s%s\nM,y ytext,yy text;},丁{fprintfyyout,n%s%s\nn,yytext,yytext;}{fprintfyyout,n%s%s\n“,y ytext,yy text;}•».n{fprintfyyout,n%s%s\nn,y ytext,yy text;}*{fprintfyyout,n%s%s\nn,yytext,yytext;}inn{fprintfyyout,%s%s\n\y ytext,yy text;}{fprintfyyout,n%s%s\n\yytext,yytext;,Itfl{fprintfyyout/%s%s\n yytext,yytext;}{fprintfyyout,H%s%s\n”,yytext,yytext;}={fprintfyyout,n%s%s\nn,y ytext,yy text;}“二{fprintfyyout,n%s%s\n,yytext,yytext;}{fprintfyyout/%s%s\nn,y ytext,yy text;}{number}{fprintfyyout,n%s%s\n\NUMn,yytext;}{identifier}{fprintfyyout,n%s%s\n”,nID\yytext;}{whitespace}{/*skip whitespace*/}/*{char c;int done=FALSE;do二二=={while cinput!=*;while cinput ifc==7done=TRUE;}while!done;.{fprintfyyout;,%s,%s\nn,HERRORH,yytext;%%main argc,argvintargc;char**argv;++argv,-argc;/*skip overprogram name*/ifargc0yyin=fopen argv
[0],nrn;//yyin存放LEXYY的输入源程序elseyyin=stdin;++argv,-argc;/*skip overinput name*/ifargc0存放的输出程序yyout=fopen argv
[0],w;//yyout LEXYYelseyyout=stdout;;yyiex intyywrapOreturn1;。
个人认证
优秀文档
获得点赞 0