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