实验内容
(1)C++源代码扫描程序识别C++记号。 C++语言包含了几种类型的记号:标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等。
(2)打开一个C++源文件,打印出所有以上的记号。
(3)选作部分:为了提高c++源程序的可读性,C++程序在书写过程中加入了空行、空格、缩进、注释等。假设你想牺牲可读性,以节省磁盘空间,那么你可以存贮一个删除了所有不必要空格和注释的C++源程序的压缩文本。因此,程序中还应该有这样的压缩功能。
(4)选作部分:进一步思考或实现——如何进一步实现减少源文件大小的压缩功能。
(6)应该书写完善的软件文档。
二、实验设备
操作系统:Windows7或者linux
软件:VC6.0、Lex扫描程序生成器
三、实验步骤
1、写出标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号的正则表达式,结果如下:
Letter [a-z|A-Z]//字母
Nat [0-9]+//数字
All ({Letter}|{Number}|{OP}|{String}|{Special}|[])*//包含实验要求的正则表达式
Number {Nat}("."{Nat})?//数(整数、浮点数)
Note"//"{All}|"/*"{All}"*/"//注释
OP"+"|"-"|"*"|%|"/"|"^"|"|"//运算符号
Keyword(include|define|iostream.h|int|float|double|main|if|else|for|while|do|switch|case|static|cin|cout|void|return)//由于C++的关键字太多,这里列举一些常用的关键字
String["]({Letter}|{Nat})*["]//字符串
Identifier {Letter}+//标识符
Special#|<|<[<=>]|>|>[=>]|"["|"]"|"{"|"}"|!|!=|"("|")"|=|==|".";
//由于C++的特殊符号太多,这里列举一些常用的特殊符号
Whitespace \n|[\t]+//换行符号和制表符
2、编写输入文件
Lex输入文件如下:
3.Linux下编译链接运行结果并生成txt文件如下:
4.Windows下使用VC6.0将lex.yy.c文件进行编译链接结果如下:
5.打开txt文件查看压缩功能,基本上实现了删除所有不必要空格和注释的C++源程序的压缩文本功能。