lex.flex的使用【DOC精选】.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.flex的使用【DOC精选】

从lexyacc说到编译器(2.flex的使用) 作者:tangl_99 QQ:8664220 msn:tangl_99@ email:tangl_99@ 看了第一篇的关于正则表达式的说明后,下面我们就来通过它,使用flex这个词法分析工具来构造我们的编译器的词法分析器. 关于lex的教程应该是很多,这里我就简单地介绍一下,然后着重后面的lex和yacc的配合使用以及其技巧.所以,如果你不看了后还是不太明白lex或者yacc的使用,请你自己上网去查查,这方面的教程是很多的.我知道的一篇常见的就是 Yacc 与 Lex 快速入门 Lex 与 Yacc 介绍 它的作者就是Ashish Bansal. Flex就是fast lex的意思.而lex就是Lexical Analyzar的意思.flex可以在cygwin或者gnupro中找到.它是unix的一个工具,属于GNU组织产品.网上也可以找到单独可以在windows下用的版本. 我们一般把我们的词法扫描程序要扫描的一些单词(token)用正则表达式写好,然后作为lex的输入文件,输入命令flex xxx.l(xxx.l就是输入文件),lex经过处理后,就能得到一个名字叫lex.yy.c的C源代码.这个C源代码文件,就是我们的词法扫描程序.通常lex为我们生成的词法分析器的C源代码都是十分复杂而且庞大的,我们一般根本不会去查看里面的代码(放心好了,flex这个东西不会出错的) 下面让我们看看几个我已经使用过的几个lex输入文件. 这是一个前段时间我为GBA上的一个RPG游戏写的脚本引擎所使用的lex输入文件(部分) 例2.1 %{ /* need this for the call to atof() below */ #include stdio.h #include stdlib.h #include math.h #include globals.h %} digit [0-9] number (-|+)?{digit}+ hexnumber 0x({digit}|[a-fA-F])+ letter [a-zA-Z] identifier ({letter}|_)({number}|{letter}|_)* newline [\n] whitespace [ \t]+ string \[^]*\ comment #[^#]*# %% {string} { return VM_STRING; } Logo { return VMIN_LOGO; } FaceIn { return VMIN_FACEIN; } FaceOut { return VMIN_FACEOUT; } LoadTile { return VMIN_LOAD_TILE; } CreateRole { return VMIN_CREATE_ROLE; } ReleaseRole { return VMIN_RELEASE_ROLE;} CreateMap { return VMIN_CREATE_MAP; } ReleaseMAP { return VMIN_RELEASE_MAP;} ShowBitmap { return VMIN_SHOWBITMAP; } CreateDialog { return VMIN_CREATE_DIALOG; } ReleaseDialog { return VMIN_RELEASE_DIALOG;} Fight { return VMIN_FIGHT; } Delay { return VMIN_DELAY; } PressA { return VMIN_PRESS_A; } PressB { return VMIN_PRESS_B; } PressR { return VMIN_PRESS_R; } PressL { return VMIN_PRESS_L; } PressStart { return VMIN_PRESS_START; } PressSelect { return VMIN_PRESS_SELECT;} {number} { return VM_NUMBER; } {whitespace} { /* skip whitespace */ } {identifier} { return VM_ID; } {newline}

文档评论(0)

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

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

1亿VIP精品文档

相关文档