资源描述:
《实验1:用lex构造c子集词法分析器》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验报告实验项目名称:用lex构造c子集词法分析器学时:2学时一.实验目的和要求用lex构造c子集词法分析器,能实现识别c子集源程序的单词序列。二.实验环境VC/tcdos三.实验过程A:lex使用方法1在“运行“中输入:cmd进入dos环境2进入LEX所在文件夹。(cd命令若LEX在f盘根目录下>f:>cdlex3LEX使用步骤:(直接在屏幕显示词法分析结果,不保留的)1、编写LEX源程序,如“1.L”,将“1.L”与FLEX.EXE保存在同一文件夹下。2、进入DOS环境FLEX.EXE所在文件夹,运行FLEX.E
2、XE程序。ØFLEX1.L3、运行FLEX后,产生“LEXYY.C”程序4、用VC打开“LEXYY.C”程序,编译后产生“LEXYY.EXE”程序。5、进入DOS环境“LEXYY.EXE”所在文件夹,编写1.c程序,运行“LEXYY.EXE”程序。>LEXYY.EXE1.c的结果。1.L源程序:实现功能将所有小写字母转换成大写。%{#include%}%%[a-z]printf("%c",yytext[0]+'A'-'a');%%main(argc,argv)intargc;char**argv;{
3、++argv,--argc;/*skipoverprogramname*/if(argc>0)yyin=fopen(argv[0],"r");//yyin存放LEXYY的输入源程序elseyyin=stdin;++argv,--argc;/*skipoverinputname*/if(argc>0)yyout=fopen(argv[0],"w");//yyout存放LEXYY的输出程序elseyyout=stdout;yylex();}intyywrap(){return1;}B:构造c子集词法分析器1、编写c子集的
4、LEX源程序,如“lex.L”,将“lex.L”与FLEX.EXE保存在同一文件夹下。2、运行FLEX.EXE程序。3、运行FLEX后,产生“LEXYY.C”程序4、用VC打开“LEXYY.C”程序,编译后产生“LEXYY.EXE”程序。5、编写一个c子集源程序A.c(每个人的源程序不相同)main(){inta;realb;a=2*32;b=3.124;}运行“LEXYY.EXE”程序。>LEXYY.EXEA.c看词法分析的结果。四实验结果将词法分析的结果抄到实验报告五:错误分析由于该词法分析程序是分析c子集,ca
5、se等关键字不能识别,字符型不能识别,部分运算符号和界符不能识别。编写c源程序需注意c子集范围。Lex1.L源程序:%{#include#ifndefFALSE#defineFALSE0#endif#ifndefTRUE#defineTRUE1#endif%}digit[0-9]number{digit}+letter[a-zA-Z]identifier{letter}+newline[]whitespace[t]+%%"main"printf("baoliuzi:%s",yytext);
6、"if"printf("baoliuzi:%s",yytext);"else"printf("baoliuzi:%s",yytext);"for"printf("baoliuzi:%s",yytext);"while"printf("baoliuzi:%s",yytext);"do"printf("baoliuzi:%s",yytext);"int"printf("baoliuzi:%s",yytext);"="printf("yunsuanfu:%s",yytext);"+"printf
7、("yunsuanfu:%s",yytext);"-"printf("yunsuanfu:%s",yytext);"*"printf("yunsuanfu:%s",yytext);"/"printf("yunsuanfu:%s",yytext);"<"printf("yunsuanfu:%s",yytext);">"printf("yunsuanfu:%s",yytext);"("printf("jiefu:%s",yytext);")"printf("jiefu:%s",yytext
8、);"["printf("jiefu:%s",yytext);"]"printf("jiefu:%s",yytext);"{"printf("jiefu:%s",yytext);"}"printf("jiefu:%s",yytext);";"printf("jiefu:%s",yytext);":"printf("jiefu