(编译原理)C++源代码单词扫描程序(词法分析)

时间:2022-01-15 03:54:25

实验内容  

1C++源代码扫描程序识别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输入文件如下:

(编译原理)C++源代码单词扫描程序(词法分析)

3.Linux下编译链接运行结果并生成txt文件如下:

(编译原理)C++源代码单词扫描程序(词法分析)

4.Windows下使用VC6.0lex.yy.c文件进行编译链接结果如下:

(编译原理)C++源代码单词扫描程序(词法分析)

5.打开txt文件查看压缩功能,基本上实现了删除所有不必要空格和注释的C++源程序的压缩文本功能

(编译原理)C++源代码单词扫描程序(词法分析)