编译原理——实验 1.1用 FLEX自动构造词法分析程序
来源:互联网 发布:程序员入门教程 编辑:程序博客网 时间:2024/05/16 05:02
一、实验目的
1. 学习使用词法分析程序自动构造工具 Flex
2. 熟悉LEX源程序语法
3. 掌握词法分析程序的自动构造方法
二、实验平台
Windows + Flex
三、基础内容
1. 实现以下步骤, 掌握Flex的工作过程
i. 构造 LEX 源程序, 例如命名为 Test.Lex
ii. 编译 LEX 源程序, 生成C语言词法分析程序 lex.yy.c, 步骤如下:
在DOS命令提示符下执行编译 flex Test.Lex 得到目标文件 lex.yy.c
iii. 在VC中编译 lex.yy.c,产生可执行程序 lex.yy.exe
iv. 运行生成的可执行文件 lex.yy 或 lex.yy < InputFile
2. 测试目录 SRC_FLEX中的范例程序,了解其功能及实现。
四、附加内容
★★ 输入一个 C源程序文件, 用FLex 实现以下任务
a) 添加行号。
b) 将文件中每个非空的空白符号序列替换为单个空格。
c) 将文件中所有关键字转换为大写字母。
d) 将文件中所有标识符转换为小写字母,且以下划线开头。
e) 将文件中所有指数形式的常量转换为小数形式。
例如: 2.5e3 被转换为 2500
3.7e-2 被转换为 0.037
f) 将转换后的文件存入另一个文件。
参考资料
1. LEX范例程序:SRC_FLEX
b.lex文件如下:
%{ #include <stdio.h> FILE *f1; FILE *f2; int hanghao=2;%}keyword auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|AUTO|BREAK|CASE|CHAR|CONST|CONTINUE|DEFAULT|DO|DOUBLE|ELSE|ENUM|EXTERN|FLOAT|FOR|GOTO|IF|INT|LONG|REGISTER|RETURN|SHORT|SIGNED|SIZEOF|STATIC|STRUCT|SWITCH|TYPEDEF|UNION|UNSIGNED|VOID|VOLATILE|WHILEid [A-Za-z]+digit [0-9]huan {digit}+(\.{digit}+)?(E[+-]?{digit}+)?%%[ ]+ {fprintf(f1," ");}\n {fprintf(f1,"%s%u",yytext,hanghao++);}{keyword} { int i; for(i=0;i<yyleng;i++) { if(yytext[i]>='a'&&yytext[i]<='z') yytext[i]-=32; } fprintf(f1,"%s",yytext); }{id} { int i; for(i=0;i<yyleng;i++) { if(yytext[i]>='A'&&yytext[i]<='Z') yytext[i]+=32; } fprintf(f1,"_%s",yytext); }{huan} { float t=0; t=atof(yytext); fprintf(f1,"%f",t); }. fprintf(f1,"%s",yytext);%%int yywrap(void){ return 1;}main(){ f1=fopen("f1.txt","w+"); fprintf(f1,"1"); yylex(); fclose(f1); f1=fopen("f1.txt","r"); f2=fopen("f2.txt","w"); char e; while((e=fgetc(f1) )!= EOF ) {fputc(e,f2);} fclose(f1); fclose(f2);}
心得体会:
经过这次的实验,我学到了很多新的知识和好的学习方法。说实话,刚开始并不知道这门课程的实验到底要怎么做,不知道从何做起。但是经过调试老师给的事例,不断的失败不断的重复实验,不会的问同学,看书,百度,总之就是不断重复。终于,我做出来了,这离不开同学的耐心讲解和一直坚持的自己。或许,有些事开始认为不可能,只有在自己坚持做了,才会取得成果!下次继续努力吧!
- 编译原理——实验 1.1用 FLEX自动构造词法分析程序
- 编译原理 - 用FLEX自动构造词法分析程序
- 编译原理-用FLEX构造词法分析程序
- 编译原理 实验1 词法分析程序的构造
- 编译原理实验一 词法分析程序
- 编译原理实验一——简单词法分析
- 哈工大编译原理实验1——词法分析
- 编译原理实验----词法分析
- 编译原理实验---词法分析
- 编译原理词法分析程序
- 编译原理词法分析程序
- 编译原理词法分析程序
- 编译原理:词法分析程序
- 编译原理 词法分析程序
- 编译原理--实验一 词法分析
- 编译原理实验 之 词法分析
- 编译原理实验改进版(词法分析)
- 【编译原理】实验1.词法分析
- android studio adb 连不上,解决办法
- 《关于C++中运算符的重载》
- const类型类成员的初始化
- 根据HttpSevletRequest 获取url 所有参数
- android 提高进程优先级 拍照永不崩溃(闪退)
- 编译原理——实验 1.1用 FLEX自动构造词法分析程序
- 身份证上的号码代表的意思大揭秘
- gdb调试程序
- Python for Everybody-Using Python to Access Web DatExtracting Data With Regular Expressions
- Java定位CPU使用高问题
- Vim快捷键简介
- Linux环境下段错误的产生原因及调试方法小结
- 异常抛出类
- 欢迎使用CSDN-markdown编辑器