Lex和Yacc应用方法(二).再识Lex与Yacc.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Lex和Yacc应用方法(二).再识Lex与Yacc

Lex和Yacc应用方法(二).再识Lex与Yacc 草木瓜早在二十世记七十年代之前,编写编译器一直是一个非常费时的工作。但到了1975这 一年这一切却发生了重大转变,首先Stephen C. Johnson Lesk在贝尔实验室完成了 Yacc开发,为了配合yacc更好的协作, Mike Lesk和Eric Schmidt又完成了lex。从 而Lex和yacc成为计算机编译领域的重要理论,而这些工具也极大地简化了编写编译 器的工作。 后来Robert Corbett和Richard Stallman在此基础上又完成了bison。Jef Poskanzer, Vern Paxson 也对lex作了大量改进,称为flex。 本系列文章的地址:/liwei_cmg/category/207528.aspx 一、Lex理论 Lex使用正则表达式从输入代码中扫描和匹配字符串。每一个字符串会对应一个动作。 通常动作返回一个标记给后面的剖析器使用,代表被匹配的字符串。每一个正则表达 式代表一个有限状态自动机(FSA)。我们可以用状态和状态间的转换来代表一个(FSA)。 其中包括一个开始状态以及一个或多个结束状态或接受状态。 我们以上文《Lex和Yacc应用方法(一).初识Lex》第一个例子详细说明: exfirst.l %{ #include stdio.h %} %% [\n] ; A [0-9]+ printf(Int : %s\n,yytext); B [0-9]*\.[0-9]+ printf(Float : %s\n,yytext); C [a-zA-Z][a-zA-Z0-9]* printf(Var : %s\n,yytext); D [\+\-\*\/\%] printf(Op : %s\n,yytext); E . printf(Unknown : %c\n,yytext[0]); F %% 这里使用一相对简单的输入文件 file.txt i=1.344+39; bcd=4%9-333 我们假定, Lex 系统创建一动态列表:内容+规则+状态 Lex 状态:1 接受 2 结束 接受表示该元素可以做为模式匹配 结束表示该元素已完成模式匹配 读入“i” [查找元素]查找相邻且状态为1的元素,无元素, [匹配规则]D, [新增列表元素1并置数据](存在则覆盖)状态为1,规则为D,内容为i。 [操作顺序符] 1 读入“=” [查找元素]查找相邻且状态为1的元素,“i=”寻找匹配规则,无规则 [置上一元素]元素1状态为2 [匹配规则]F, [新增列表元素2并置数据](存在则覆盖)状态为1,规则为F,内容为= [操作顺序符] 2 读入“1”, [查找元素]查找相邻且状态为1的元素,“=1”寻找匹配规则,无规则 [置上一元素]元素2状态为2 [匹配规则]B, [新增列表元素3并置数据](存在则覆盖)状态为1,规则为B,内容为1 [操作顺序符] 3 读入“.” [查找元素]查找相邻且状态为1的元素,“1.”寻找匹配规则,无规则,但有潜在规则C [匹配规则]F, [新增列表元素4并置数据](存在则覆盖)状态为1,规则为F,内容为. [置上一元素]元素3状态为1 [操作顺序符] 4 读入“3” [查找元素]查找相邻且状态为1的元素,“1.3”寻找匹配规则,有规则 [置起始元素]状态为1,规则为C,内容为1.3 [操作顺序符] 3 组合元素的起始操作符 读入“4” [查找元素]查找相邻且状态为1的元素,“1.34”寻找匹配规则,有规则 [置起始元素]状态为1,规则为C,内容为1.34 [操作顺序符] 3 组合元素的起始操作符 读入“4” [查找元素]查找相邻且状态为1的元素,“1.344”寻找匹配规则,有规则 [置起始元素]状态为1,规则为C,内容为1.344 [操作顺序符] 3 组合元素的起始操作符 读入“+” [查找元素]查找相邻且状态为1

文档评论(0)

xy88118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档