第3章词汇分析.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文档。上传文档
查看更多
第3章词汇分析

第3章 词法分析;;词法分析的两种处理结构 (a)词法分析程序作为主程序 (b)词法分析程序作为子程序;3.1 扫描处理;常数:包括各种类型的常数,如整型常数386、实型常数0.618、布尔型常数TRUE、字符串常数“Hello world!”等。 运算符:如“+”、“-”、“*”、“/”、“”、“”等。 界符:在语言中是作为语法上的分界符号使用的,如“,”、“;”、“(”、“)”等。 一个程序语言的保留字、运算符和界符的个数是确定的,而标识符或常数的使用则不限定个数。;;;例3-1 语句 if (count0) inr = inr + 368; else inr = inr * inr; 经过词法分析器输出: (if, _) ((, _) (id, “count”) (, _) (num, 0) (), _) (id, “inr”) (=, _) (id, “inr”) (+, _) (num, 368) (;, _) (else, _) (id, “inr”) (=, _) (id, “inr”) (*, _) (id, “inr”) (;, _);;;; 在某些情况下,词法分析器在把单词传给语法分析器之前,需要从输入串超前地读入一些字符,以确定需要传递给语法分析器的正确单词。例如,词法分析器在读到字符时需要读入下一个字符。如果下一个字符是=,则词法分析器把=组合在一起作为形成“大于等于”操作符单词的字符串;否则把作为形成“大于”操作符单词的字符串,这时词法分析器已经多读了一个字符。多读入的字符必须退回给输入流,因为它可能是下一个单词的开始符号。;3.2 单词的描述——正规表达式; 程序设计语言的单词就是具有特定格式的字符串,所以我们可以用正规表达式来定义单词。例如,如果字母用letter表示,数字用digit表示,则标识符集可以用正规表达式定义为 letter(letter|digit)* 其中,letter与(letter|digit)*的并置表示两者的连接;“|”表示两个表达式二者选一,letter|digit 表示在letter和digit中两者选一;“*”表示零次或多次引用“*”标记的表达式,(letter|digit)*是letter|digit的零次或多次并置,即表示长度为0,1,2,…的字母数字串。letter(letter|digit)*表示字母开头的字母数字串,也即标识符集。 letter(letter|digit)*就是表示标识符的正规表达式,而标识符集就是这个正规表达式所表示的正规集。;对于给定的字母表?,正规式和正规集的递归定义: (1)?和?都是?上的正规式,表示的正规集分别为{?}和?。 (2)对任何a??,a是?上的正规式,表示的正规集为{a}。 (3)如果R和S是?上的正规式,它们所表示的正规集分别为L(R)和L(S),则: ①R|S是?上的正规式,表示的正规集为L(R)?L(S); ②R?S是?上的正规式,表示的正规集为L(R)L(S); ③(R)*是?上的正规式,它所表示的正规集为(L(R))*; ④(R)也是?上的正规式,它所表示的正规集为L(R)。 (4)仅由有限次使用规则(1)~(3)得到的表达式是?上的正规式,它所表示的集合是?上的正规集。;正规式间的运算符“|”表示或,“?”表示连接(通常可省略),“*”表示闭包,使用括号可以改变运算的次序。如果规定“*”优先于“?”,“?”优先于“|”,则在不出现混淆的情况下括号也可以省去。 注意正规表达式a、字符串a和符号a这三者的含义是不同的,我们可以从上下文中清楚地区分出所谈到的a的具体含义。 对于?上的正规式R和S,如果它所表示的正规集L(R)=L(S),则称R和S等价,并记为R=S。;正规表达式的性质 (1) 交换律:R|S = S|R。 (2) 结合律:R|(S|T) = (R|S)|T; R(ST) = (RS)T。 (3) 分配律:R(S|T) = RS|RT; (R|S)T = RT|ST。 (4) 同一律:?R = R? = R。 (5) 幂等律:R** = R*;例3-2 令?={a,b} L(a|b)={a,b}。 L((a|b)(a|b))={aa, ab, ba, bb},表示同样集合的另一正规表达式可以是aa|ab|ba|bb。 L(a*)={?,a,aa,aaa,…}。 L((a|b)*)={?, a, b, aa, ab, ba, bb, aaa, aab, aba, ab

文档评论(0)

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

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

1亿VIP精品文档

相关文档