- 浏览: 281002 次
- 性别:
- 来自: 济南
文章分类
最新评论
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程序
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的文件,用浏览器打开:
转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7760927
发表评论
-
unity基础开发----物体位移和旋转实用代码
2013-11-21 22:46 1271using UnityEngine; using Syst ... -
Android中View绘制优化之一---- 优化布局层次
2012-09-04 23:00 1076... -
Android中View绘制优化二一---- 使用<include />标签复用布局文件
2012-09-08 13:54 1057... -
Android中View绘制优化之三---- 优化View
2012-09-13 21:00 1085... -
兰林任务管理应用程序雏形版以及概要说明
2012-09-15 21:54 881... -
Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)
2012-10-10 18:14 1169... -
Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)
2012-10-17 20:05 862... -
Android中文件选择器的实现
2012-11-30 08:59 1175... -
【编译原理】正则表达式
2012-07-21 21:49 230708年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【OpenCV】访问Mat图像中每个像素的值
2012-07-22 07:10 1173今天百度搜资料还搜到了自己的。。。《访问图像中每个像素的值 ... -
【编译原理】用Yacc做语法分析
2012-07-23 05:47 177508年9月入学,12年7月毕 ... -
【UML】UML几种图的绘制
2012-07-24 09:49 99108年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【OpenCV】邻域滤波:方框、高斯、中值、双边滤波
2012-07-26 10:52 1461邻域滤波(卷积) 邻域算子值利用给定像素 ... -
【数据结构】排序算法:希尔、归并、快速、堆排序
2012-07-28 06:15 102708年9月入学,12年7月毕 ... -
【OpenCV】角点检测:Harris角点及Shi-Tomasi角点检测
2012-07-31 13:25 1547角点 特征检测与匹配 ... -
【UML】案例分析:机场运作系统
2012-08-01 17:22 313708年9月入学,12年7月毕 ... -
【OpenCV】边缘检测:Sobel、拉普拉斯算子
2012-08-04 13:41 1549边缘 边缘(edge)是指图像局部强度变化最显著的部分。主要 ... -
【OpenCV】Canny 边缘检测
2012-08-08 10:17 1997Canny 边缘检测算法 1986 ... -
【UML】案例分析:新型超市购物自助系统
2012-08-19 01:13 129608年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ... -
【数据结构】二叉树、AVL树
2012-08-21 00:30 109908年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大 ...
相关推荐
总的来说,"编译原理LEX--作为交流学习使用"这个资源为我们提供了一个实践和学习编译原理,尤其是词法分析的宝贵机会。通过研究和实践,我们可以加深对编译器设计的理解,提高解决问题的能力,同时也为将来可能涉及...
本文将深入探讨“lex”——一个用于生成词法分析器的强大工具,以及如何通过它来帮助我们理解和实现编译原理。 词法分析器的主要任务是从源代码中识别出一个个有意义的符号,也就是我们所说的“词法单元”或“token...
* 如何在lex/yacc中使用C++和STL库,用extern "C"声明那些lex/yacc生成的、要链接的C函数,如yylex(), yywrap(), yyerror()。 * 重定义YYSTYPE/yylval为复杂类型。 * 用%token方式声明yacc记号。 * 用%type方式声明...
编译器是一种程序,它将高级语言(如C++、Java)编写的源代码转换为目标机器语言,以便计算机能够理解和执行。这个过程通常分为五个阶段:词法分析、语法分析、语义分析、优化和目标代码生成。词法分析是第一个阶段...
总之,通过这样的课程设计,学生不仅可以掌握编译原理的基本概念,还能提高C++或C编程技能,为未来成为软件开发者或系统架构师打下坚实基础。编译器设计是一个复杂但富有挑战性的领域,对于任何对计算机科学感兴趣的...
词法分析是编译器设计中的重要组成部分,它在编译过程中扮演着第一个阶段的角色。词法分析器,也称为扫描器,其主要任务是对源代码进行逐字符扫描,并依据预定义的构词规则识别出一个个有意义的单词,即单词符号或...
压缩包中的“编译原理语法树”文件可能包含了使用yacc和lex构建的C++语法分析器的示例,以及它分析C++源代码后生成的语法树的可视化表示。通过查看这些示例,开发者可以更深入地理解编译器的工作原理,学习如何构建...
题目:c--语言编译器设计与实现(请为自己的编译器命名) 源语言定义:或采用教材中Decaf语言,或采用C语言(或C++语言或C#语言或JAVA语言)部分关键语法规则。源语言要求至少包含的语言成分如下: 数据类型至少包括...
编译原理四次实验——词法分析器与语法分析器(C/C++/Lex语言) 词法分析器实验一 请根据书本第二章第二节中表2.1和图2-5,用C语言编写一个简单词法分析器,能够读入C的源程序,然后输出识别的单词和对应的种类以及...
2. **运行flex**:使用flex工具将flex文件转换为C++源代码(通常是lex.yy.c)。 3. **创建bison文件**:编写描述语法的bison文件,包含语法规则和动作。 4. **运行bison**:使用bison工具将bison文件转换为C++源代码...
【描述】:“使用lex生成的c/c++代码注释消除程序 附源代码和可执行程序”表明这个工具是用lex(也称为flex,一种词法分析器生成器)编写的。Flex是一种广泛使用的工具,能够根据用户定义的规则生成词法分析器,用于...
编译原理是一门计算机科学的核心课程,它涉及到如何将高级编程语言转化为机器可理解的指令。本项目提供了三个不同的实现角度,分别使用C++编程语言、lex工具和LL1方法进行实践。 首先,我们来详细了解一下词法分析...
在本课程设计中,我们将深入理解并实践如何使用特定工具来实现C或C++语言的词法分析器。这个过程涉及到识别关键字、标识符、常量、运算符以及各种分隔符等。 首先,我们要了解词法分析的基本概念。词法分析,也称作...
编译原理是计算机科学中的一个重要领域,它涉及将高级编程语言转换为机器可理解的二进制代码的过程。在这个主题中,我们主要关注的是“语法分析”阶段,这是编译器设计的关键步骤之一。语法分析通常分为两种类型:...
在编程领域,编译原理是理解计算机语言处理过程的关键部分,而C++词法分析器则是其中的一个重要组件。词法分析器,也被称为扫描器或lexical analyzer,是编译器的第一个阶段,它负责将源代码分解成一系列有意义的...
"LexicalAnalysis"这个文件很可能是介绍如何设计和实现这样的词法分析器,可能包含相关的源代码示例、练习和解决方案,对于理解编译原理以及C/C++编译器工作原理的学习者来说非常有价值。通过深入学习这个资料,可以...
在计算机科学领域,编译原理是研究如何将高级编程语言转换为机器可理解的低级语言(通常是汇编代码或机器代码)的学科。在这个过程中,lex和yacc(或者现代的flex和bison)是两个重要的工具,它们在编译器设计中扮演...
4. Makefile:用于编译和链接项目的脚本,通常包括如何使用`Flex`生成`lex.yy.c`以及如何使用`g++`编译和链接所有源文件的指令。 5. 测试用例和脚本:可能包含`test.in`(测试输入文件)和`test.out`(预期输出文件...
在计算机科学领域,编译原理是研究如何将高级程序设计语言转换为机器可执行代码的一门学科。这个过程包括多个阶段,其中词法分析和语法分析是编译器设计的关键部分。本实验主要关注C语言的词法分析,基于LEX工具进行...
编译语言如C、C++在运行前需要完整编译,生成可执行文件;而直译语言如Python、JavaScript则在运行时逐行解释,无需预先编译。 **编译器历史** 编译器的发展始于早期计算机时代,随着高级语言的出现,如FORTRAN、...