12使用flex.ppt.pptVIP

  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文档。上传文档
查看更多
12使用flex.ppt

使用Flex 怎样使用LEX? LEX的输入为包含正则表达式及其处理动作的文件(*.l) 输出为包含词法分析函数yylex()的源代码文件(lexyy.c或lex.yy.c)。用户可将它与其它程序链接即可运行。 LEX分析采用DFA转换表算法。 怎样写LEX的输入文件? 正则表达式 flex词法分析器的模式使用了正则表达式语言,本质上是扩展的POSIX正则表达式 正则表达式使用元语言来描述想匹配的模式 元语言使用标准的文本字符,一部分代表自身而另一部分代表模式(有特殊意义) 未说明有特殊意义的文本字符代表其自身,如:字母和数字 正则表达式中特殊意义的字符 字符 含义 . 匹配除 \n外的任意字符 [ ] 字符类。匹配括号内的任意字符。 如果第一个字符是 ^ 那么它表示否定模式。 例: [abC] 匹配 a, b, 和 C中的任何一个。 - 用来指定范围 例如:[A-Z] 指从 A 到 Z 之间的任意一个字符。 正则表达式中特殊意义的字符 字符 含义 {-} 新版本才有,匹配前一个字符类减去后一个字符类,如: [a-z]{-}[jv] ^ 如果是正则表达式的第一个字符就匹配行首,也被用于方括号中表示补集 $ 如果是正则表达式的最后一个字符则匹配一行的结尾。 { } 表示重复(如果它们括起来的是数字)或 定义的表达式 (如果它们括起来的是一个名字) 。 例: A{1,3} 表示 A 可能出现1次~3次 0{3}匹配000, {digit} 名字为digit的正则表达式 正则表达式中特殊意义的字符 * 匹配0个或者多个上述的模式。 + 匹配1个或者多个上述模式。 ? 匹配0个或1个上述模式。 \ 用来转义元字符。 用来覆盖字符在此表中定义的特殊意义,表示字符本意,如:\n表示换行,\\表示字符\本身,\*表示星号本身 | 表达式间的逻辑或,匹配其中之一,如:性别可表示为male|female 正则表达式 含义 joke[rs] 匹配 jokes 或 joker。 A{1,2}shis? 匹配 AAshis, Ashis, AAshi, Ashi。 (A[b-e])+ 匹配以A开头、奇数位为A、偶数位为b~e之间的任意字符且长度为大于0的偶数的串。 例 给文本添加行号的扫描程序 % { /* 在源代码中加行号的LEX程序* / #include stdio.h int lineno = 1; % } line .*\n %% {line} { printf ( %5d %s, lineno++, yytext ); } %% main( ) { yylex(); return 0; } 例.只输出以a开头和a结尾的所有行的Lex 输入文件: % { #include stdio.h % } ends_with_a .*a\n begins_with_a a.*\n % % {ends_with_a} ECHO; {begins_with_a} ECHO; .*\n ; % % main( ) { yylex( ); return 0; } 例 将除c-风格注释外所有的大写字母转变成小写字母的程序: % { #include stdio.h #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif % } % % [A-Z] {putchar(tolower(yytext[0])); /* yytext[0]为找到的单大写字母 */ } /* { char c ; int done = FALSE; ECHO ; do { while ((c=input())!=*) putchar( c ) ; putchar( c ) ; while( ( c = input( ) ) = =

文档评论(0)

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

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

1亿VIP精品文档

相关文档