补充LEX.docVIP

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

B.2 lex源程序的格式 LEX编译系统的源语言LEX语言介绍LEX源程序是对一个词法分析程序的说明或描述LEX源程序由三部分组成:说明部分;转换规则和辅助过程,用%%做间隔符。格式为: 例1:将输入串照原样抄到输出文件中 %% 例2:将小写字母转换成大写字母 %% [a-z] printf(%c,yytext[0]+A-a); %% 例3: IDENT [a-zA-Z] [a-zA-Z0-9]* NUMBER [0-9] [0-9]* %% ( { cc++; return Lparen;} ) { cc++; return Rparen;} ∶= { cc++; cc++;return ASGN;} ; { cc++; return Semicolon;} {NUMBER} { cc += yyleng;        return NUMBER; } {IDENT} return IDENTIFIER;   、说明部分包括变量的说明、常量说明、正规定义,正规定义是形式如下的一系列定义: 其中Σ是基本字母表,每个di是不同的名字,每个ri是在Σ{d1,d2,…,di-1}上的正规式,即基本字母表和前面定义的名字。ri中不能含有di,d,…,d,r i可构成一个正规表达式, 只要反复将式中出现的名字代以相应的正规式即可. 如果允许ri中出现dj (j=i),那么这种替换过程将有可能不能终止. (陈火旺 p58) 正规定义的di用做转换规则中出现的正规表达式的成分使用。有些LEX实现版本并不需要→转换规则其中每个Pi是一个正规式,是Σ{d1,d2,…,dn}上的正规式;di 纯粹最终都可化为Σ上的正规式. 因此Pi也同样如此. 每个action i是一段C程序代码,当然,一般应是任何实现语言的代码段。它指出在识别出Pi所描述的单词之后,词法分析器所应采取的动作。Pi的单词符号. 转换规则是核心, 左边是正规式, 右边是相应动作. 正规式和动作之间用空格隔开. integer printf(“found keyword INT”); 1)expression 正规式 (1) 可以直接写出相应正规式。 [a-z]+ printf(“%s”,yytext); (2) 可以使用辅助定义。 辅助定义在识别规则中的使用方法, 用{}将name括起来, lex自动调用translation去替换它. NUMBER [0-9] [0-9]* %% {NUMBER} { } (3) 一个例子, 用辅助定义的手段来识别FORTRAN语言中的整数和实数的lex源程序 例: p313 2)action 动作 (1) 动作部分如果只是一个简单的C表达式, 则可以写在正规式右边同一行中, (2) 如果动作占两行以上, 需要用花括号括起来. integer { printf(“found keyword INT”);} 这条规则的意思是在输入串中寻找词形 “integer”, 每当与之匹配成功, 就打印出 “found keyword INT” 这句话 (3) 如果相邻的几条规则的动作相同,可以用 | 写成上面的形式。 ---------------------------------------------------------------------------------------------------------------------------------------- 3、辅助过程第三部分容纳的是action所需要的辅助过程,这些过程可以分别编译并置于词法分析器中。 7) 重复和辅助定义 { } 运算符 功能 举例 匹配的内容 “” 解除运算符作用 “x” 字符x, 若x为运算符,则不起运算符作用。 \ 同上 \x 同上 [ ] 表示字符的集合, 例如 [abc] ,与单个字符a或b或c匹配 [xy] 字符x或y, ^ [^abc] 与除去a,b,c以外的任何符号匹配 作用是求方括号中除(之外的字符组成的字符集合相对与计算机的字符集的补集。 (必须写在第一个位置即紧接在左方括号之后 [^x] 除x以外的所有字符 若某正规式的 第一个字符是(, 则仅当该正规式出现在 一行的开始处时才被匹配. 一行的开始处 是指整个输入串的开始或紧接在一个回车换行之后. (x 出现在一行开始处的x - 表示字符的范围, 例如 [0-9a-z] 如字符集合中包含 - 在内,则必须把它写在第一个或最后一个位置上, 如[- + 0-9] 与所有数字和正负号匹配. [x-y] 字符x或y或z ? 指出正规式终可有可

文档评论(0)

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

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

1亿VIP精品文档

相关文档