08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205
Lex进阶实验
结合 实验:
用Lex工具进行词法分析 ,完成如下要求:
输入一个C/C++源文件,输出一个HTML文件,语法高亮显示C/C++源文件。
【实验步骤】
1、实验环境配置
安装Parser Generator,并编译lex和yacc函数库使用向导配置时,用的VS2010,属性设置如下(有些库是用的VC++6.0)
Compiler Bin Directory
C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 10.0\VC\BIN
Compiler Bin Directory(2) C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 10.0\COMMON7\IDE
Compiler Include Directory C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 10.0\VC\INCLUDE
Compiler Include Directory(2) C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\INCLUDE
Compiler Library Directory C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 10.0\VC\LIB
Compiler Library Directory(2) C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\LIB
Compiler Bin Directory(2) C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 10.0\COMMON7\IDE
Compiler Include Directory C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 10.0\VC\INCLUDE
Compiler Include Directory(2) C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\INCLUDE
Compiler Library Directory C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO 10.0\VC\LIB
Compiler Library Directory(2) C:\PROGRAM FILES\MICROSOFT VISUAL STUDIO\VC98\LIB
2、编写Lex程序
![](https://img-my.csdn.net/uploads/201207/18/1342621237_7142.png)
Keys int|double|float|char|void|#include|else|case|struct|return
thekey {Keys}/[ \t]+
这两行定义的是一些关键字,注意关键字必须跟有空白符。输出时在关键字两次加<font color=Blue></font>即用蓝色输出
keyif if/\(.*\)
keyswitch switch/\(.*\)
分别定义关键字if 和 switch,考虑到他们特殊的附加信息,要跟有()
str \".*\"
定义在双引号(“”)中的串,用红色输出。
comments1 \/\/.*
comments2 \/\*(.|\n)*\*\/
分别定义//风格与/**/风格的字串,用绿色输出。
\n {fputs("<br/>",yyout);}
这里是将换行符用<br/>代替——即HTML中的换行符
【实验结果】
读入input.c的C文件如下:
![](https://img-my.csdn.net/uploads/201207/18/1342621400_3384.png)
运行程序后,会生成output.html的文件,用浏览器打开:
![](https://img-my.csdn.net/uploads/201207/18/1342621432_6300.png)