【编译原理】使用Lex将C/C++文件输出为HTML文件

89481259 2012-07-20

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

CompilerBinDirectory(2)C:\PROGRAMFILES\MICROSOFTVISUALSTUDIO10.0\COMMON7\IDE

CompilerIncludeDirectoryC:\PROGRAMFILES\MICROSOFTVISUALSTUDIO10.0\VC\INCLUDE

CompilerIncludeDirectory(2)C:\PROGRAMFILES\MICROSOFTVISUALSTUDIO\VC98\INCLUDE

CompilerLibraryDirectoryC:\PROGRAMFILES\MICROSOFTVISUALSTUDIO10.0\VC\LIB

CompilerLibraryDirectory(2)C:\PROGRAMFILES\MICROSOFTVISUALSTUDIO\VC98\LIB

2、编写Lex程序

【编译原理】使用Lex将C/C++文件输出为HTML文件
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文件如下:
【编译原理】使用Lex将C/C++文件输出为HTML文件
运行程序后,会生成output.html的文件,用浏览器打开:
【编译原理】使用Lex将C/C++文件输出为HTML文件

转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7760927