(完整word版)实验1:用lex构造c子集词法分析器.doc
上传人:梅雪****67 上传时间:2024-09-11 格式:DOC 页数:8 大小:268KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

(完整word版)实验1:用lex构造c子集词法分析器.doc

(完整word版)实验1:用lex构造c子集词法分析器.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验报告实验项目名称:用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.EXE程序。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<stdio.h>%}%%[a-z]printf("%c",yytext[0]+'A'-'a');%%main(argc,argv)intargc;char**argv;{++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子集的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子集,case等关键字不能识别,字符型不能识别,部分运算符号和界符不能识别。编写c源程序需注意c子集范围。Lex1.L源程序:%{#include<stdio.h>#ifndefFALSE#defineFALSE0#endif#ifndefTRUE#defineTRUE1#endif%}digit[0-9]number{digit}+letter[a-zA-Z]identifier{letter}+newline[\n]whitespace[\t]+%%"main"printf("baoliuzi:%s\n",yytext);"if"printf("baoliuzi:%s\n",yytext);"else"printf("baoliuzi:%s\n",yytext);"for"printf("baoliuzi:%s\n",yytext);"while"printf("baoliuzi:%s\n",yytext);"do"printf("baoliuzi:%s\n",yytext);"int"printf("baoliuzi:%s\n",yytext);"="printf("yunsuanfu:%s\n",yytext);"+"printf("yunsuanfu:%s\n",yytext);"-"printf("yunsuanfu:%s\n",yytext);"*"printf("yunsuanfu:%s\n",yytext);"/"printf("yunsuanfu:%s\n",yytext);"<"printf("yunsuanfu:%s\n",yytext);">"printf("yunsuanfu:%s\n",yytext);"("printf("jiefu:%s\n",yytext);")"printf("jiefu:%s\n",yytext);"["printf("jiefu:%s\n",yytext);"]"printf("jiefu:%s\n",yyt