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