首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

【编译原理】用Lex作词法分析

2012-08-10 
【编译原理】用Lex做词法分析08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四

【编译原理】用Lex做词法分析

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205


用Lex做词法分析
Lex编译器将输入的模式转换成一个状态转换图,并生成相应的实现代码,并存放到文件lex.yy.c中,这些代码模拟了状态转换图。【编译原理】用Lex作词法分析
用Lex创建一个词法分析器
冲突解决规则:
1) 总是选择最长的前缀
2) 如果最长的可能前缀与多个模式匹配,总是选择Lex中先被列出的模式。

【实验步骤】
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

2、编写Lex程序(1)练习3.5.2:编写一个Lex程序。该程序拷贝一个文件,并将文件中的每个非空的空白符序列替换为单个空格。
编写Lex程序如下:
【编译原理】用Lex作词法分析

替换掉空白符后结果:【编译原理】用Lex作词法分析

(2)练习3.5.3:编写一个Lex程序。该程序拷贝一个C文件,并将程序中的关键字float的每个实例替换成double
编写Lex程序如下:
【编译原理】用Lex作词法分析



替换掉关键字float后如下:
【编译原理】用Lex作词法分析

(3)练习3.5.4:编写一个Lex程序。该程序把一个文件改变成为“Pig latin”文。明确的讲,假设该文件是一个用空白符分隔开的单词(即字母串)序列。每当你遇到一个单词时:
1)如果第一个字母是辅音字母,则将它移到单词结尾,并加上ay
2)如果第一个字母是元音字母,则只在单词的结尾加上ay
所有非字母的字符不加处理直接拷贝到输出

编写Lex程序如下:
【编译原理】用Lex作词法分析


【结果分析】(1)通过实验熟悉了Lex做词法分析。在定义规则时,对Lex解决冲突的两个原则体会尤深——总是选择最长的前缀;如果最长的可能前缀与多个模式匹配,总是选择Lex中先被列出的模式。
(2)实验中几个题目并不复杂,但却很难考虑到所有的情况,如第二个练习替换float时,不能只遇到float即可,还要判断其是否为关键字。在后面发现实验中忘了考虑float单词出现在注释中的情况。不过考虑方法和进阶实验中的考虑相似。

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



1楼ruan_xiao11小时前
望尘莫及~n编译原理是我心中永远的刺

热点排行