收藏 分享(赏)

实验1:用lex构造c子集词法分析器.docx

上传人:HR专家 文档编号:11962365 上传时间:2021-06-09 格式:DOCX 页数:13 大小:46.55KB
下载 相关 举报
实验1:用lex构造c子集词法分析器.docx_第1页
第1页 / 共13页
实验1:用lex构造c子集词法分析器.docx_第2页
第2页 / 共13页
实验1:用lex构造c子集词法分析器.docx_第3页
第3页 / 共13页
实验1:用lex构造c子集词法分析器.docx_第4页
第4页 / 共13页
实验1:用lex构造c子集词法分析器.docx_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、实 验 报 告实验项目名称:用lex 构造 c 子集词法分析器学时: 2 学时一实验目的和要求用 lex 构造 c 子集词法分析器,能实现识别c 子集源程序的单词序列。二实验环境VC/tc dos三实验过程A:lex 使用方法1 在“运行“中输入: cmd 进入 dos环境2 进入 LEX 所在文件夹。(cd 命令若 LEX 在 f 盘根目录下f:cdlex3 LEX 使用步骤:(直接在屏幕显示词法分析结果,不保留的)1、编写 LEX 源程序,如“1.L ”,将“1.L ”与 FLEX.EXE 保存在同一文件夹下。2、进入 DOS 环境 FLEX.EXE所在文件夹,运行FLEX.EXE程序。F

2、LEX 1.L3、运行 FLEX 后,产生 “ LEXYY.C”程序4 、用 VC打 开 “ LEXYY.C”程 序 , 编译后产 生“ LEXYY.EXE”程序。5、进入 DOS 环境 “ LEXYY.EXE”所在文件夹, 编写 1.c 程序,运行 “ LEXYY.EXE”程序。 LEXYY.EXE 1.c 的结果。1.L 源程序:实现功能将所有小写字母转换成大写。%#include %a-z printf(%c,yytext0+A-a);%main( argc, argv )int argc;char *argv;+argv, -argc;/* skip over program name

3、 */if ( argc 0 )yyin = fopen( argv0, r );/yyin存放LEXYY的输入源程序elseyyin = stdin;+argv, -argc;/* skip over input name */if ( argc 0 )yyout = fopen( argv0, w );/yyout 存放 LEXYY 的输出程序elseyyout = stdout;yylex();int yywrap()return 1;B:构造 c 子集词法分析器1、编写 c 子集的 LEX 源程序,如 “lex.L ”,将 “lex.L ”与 FLEX.EXE2、运行 FLEX.EXE

4、 程序。3、运行 FLEX 后,产生 “ LEXYY.C ”程序4、用 VC 打开 “ LEXYY.C ”程序,编译后产生“ LEXYY.EXE ”程序。5、编写一个c 子集源程序A.c ( 每个人的源程序不相同)保存在同一文件夹下。main()int a;real b;a=2*32;b=3.124;运行 “LEXYY.EXE” 程序。LEXYY .EXEA.c看词法分析的结果。四 实验结果将词法分析的结果抄到实验报告五:错误分析由于该词法分析程序是分析算符号和界符不能识别。编写c 子集, case 等关键字不能识别,字符型不能识别,部分运 c 源程序需注意 c 子集范围。Lex1.L源程序:

5、%#include #ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif%digitnumber0-9digit+lettera-zA-Zidentifierletter+newlinenwhitespace t+%mainprintf(baoliuzi:%sn,yytext);ifprintf(baoliuzi:%sn, yytext);elseprintf(baoliuzi:%sn,yytext);forprintf(baoliuzi: %sn,yytext);whileprintf(baoliuzi:%sn,

6、yytext);doprintf(baoliuzi:%sn,yytext);intprintf(baoliuzi:%sn,yytext);=printf(yunsuanfu:%sn,yytext);+printf(yunsuanfu:%sn,yytext);-printf(yunsuanfu: %sn,yytext);*printf(yunsuanfu: %sn,yytext);/printf(yunsuanfu:%sn,yytext);printf(yunsuanfu:%sn,yytext);(printf(jiefu:%sn,yytext);)printf(jiefu:%sn,yytext

7、);printf(jiefu: %sn,yytext);printf(jiefu:%sn,yytext);printf(jiefu:%sn,yytext);printf(jiefu:%sn,yytext);printf(jiefu:%sn,yytext);:printf(jiefu:%sn,yytext);printf(jiefu:%sn,yytext);printf(yunsuanfu:%sn,yytext);,printf(jiefu:%sn,yytext);=printf(yunsuanfu:%sn,yytext);=printf(yunsuanfu:%sn,yytext); 0 )yy

8、in = fopen( argv0, r );/yyin存放LEXYY的输入源程序elseyyin = stdin;+argv, -argc;/* skip over input name */if ( argc 0 )yyout = fopen( argv0, w );/yyout存放 LEXYY的输出程序elseyyout = stdout;yylex();int yywrap()return 1;思考题:1 该源程序中只给出了标识符符定义为字母,如何将规则改为识别字母数字的?2 参照整型变量的定义,怎样将实型变量定义出来?3 完善定义部分 。附录:若需要将词法分析器结果作为文件保留起来的

9、,则需要修改程序 LEX 使用步骤:(需要将词法分析器结果保留起来的)1、编写 LEX 源程序,如 “ Cffx.l ,将” “ Cffx.l 与 ”FLEX.EXE保存在同一文件夹下。2、进入 DOS 环境 FLEX.EXE 所在文件夹,运行FLEX.EXE程序。FLEX cffx.l3、运行 FLEX 后,产生 “ LEXYY.C ”程序4、用 VC 打开 “ LEXYY.C ”程序,编译后产生“ LEXYY.EXE ”程序。5、编写 C 子集语言源程序,保存为A.TEST ,并与 “ LEXYY.EXE”保存在同一文件夹下。6、进入 DOS 环境 “ LEXYY.EXE ”所在文件夹,运

10、行“ LEXYY.EXE ”程序。LEXYY .EXEA.TESTB.TXT7、打开 “ B.TXT ”,看词法分析的结果。Cffx.l源程序:%#include #ifndef FALSE#define FALSE 0#endif#ifndef TRUE#define TRUE 1#endif%digit0-9numberdigit+lettera-zA-Zidentifierletter+newlinenwhitespace t+%iffprintf(yyout,%s%sn,yytext,yytext);elsefprintf(yyout,%s%sn,yytext,yytext);forf

11、printf(yyout,%s%sn,yytext,yytext);whilefprintf(yyout,%s%sn,yytext,yytext);dofprintf(yyout,%s%sn,yytext,yytext);intfprintf(yyout,%s%sn,yytext,yytext);=fprintf(yyout,%s%sn, yytext,yytext);+fprintf(yyout,%s%sn,yytext,yytext);-fprintf(yyout,%s%sn,yytext,yytext);*fprintf(yyout,%s%sn,yytext,yytext);/fprin

12、tf(yyout,%s%sn,yytext,yytext);fprintf(yyout,%s%sn,yytext,yytext);(fprintf(yyout,%s%sn,yytext,yytext);)fprintf(yyout,%s%sn,yytext,yytext);fprintf(yyout,%s%sn,yytext,yytext);fprintf(yyout,%s%sn,yytext,yytext);fprintf(yyout,%s%sn,yytext,yytext);fprintf(yyout,%s%sn,yytext,yytext);fprintf(yyout,%s%sn,yyt

13、ext,yytext);:fprintf(yyout,%s%sn,yytext,yytext);fprintf(yyout,%s%sn,yytext,yytext);fprintf(yyout,%s%sn,yytext,yytext);,fprintf(yyout,%s%sn,yytext,yytext);=fprintf(yyout,%s%sn,yytext,yytext);=fprintf(yyout,%s%sn,yytext,yytext); 0 )yyin = fopen( argv0, r );/yyin存放LEXYY的输入源程序elseyyin = stdin;+argv, -argc;/* skip over input name */if ( argc 0 )yyout = fopen( argv0, w );/yyout存放 LEXYY的输出程序elseyyout = stdout;yylex();int yywrap()return 1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 管理论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报