第2章 词法分析new.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章 词法分析new.ppt

第2章 词法分析 2.1 词法分析器设计方法 2.2 一个简单的词法分析器示例 2.3 正规表达式与有限自动机简介 2.4 正规表达式到有限自动机的构造 2.5 词法分析器的自动生成 2.1 词法分析器设计方法 词法分析是编译的第一个阶段,其任务是:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号,把字符串形式的源程序改造成为单词符号串形式的中间程序。执行词法分析的程序称为词法分析程序,也称为词法分析器或扫描器。词法分析器的功能是输入源程序,输出单词符号。 词法分析可以采用如下两种处理结构: 1 把词法分析程序作为主程序。将词法分析工作作为独立的一遍来完成,即把词法分析与语法分析明显分开,由词法分析程序将字符串形式的源程序改造成单词符号串形式的中间程序,以这个中间程序作为语法分析程序的输入。在这种处理结构中,词法分析和语法分析是分别实现的,如图2–1 a 所示。 2 把词法分析程序作为语法分析程序调用的子程序。在进行语法分析时,每当语法分析程序需要一个单词时便调用词法分析程序,词法分析程序每一次调用便从字符串源程序中识别出一个单词交给语法分析程序。在这种处理结构中,词法分析和语法分析实际上是交替进行的,如图2–1 b 所示。 由于把词法分析器安排成一个子程序比较自然,因此,词法分析程序通常采用第二种处理结构。 2.1.1 单词符号的分类与输出形式 1.单词符号分类 词法分析程序简单地说就是读单词程序,该程序扫描用高级语言编写的源程序,将源程序中由单词符号组成的字符串分解出一个个单词来。因此,单词符号是程序语言的基本语法单位,具有确定的语法意义。程序语言的单词符号通常可分为下面五种: 1 保留字 也称基本字 :如C语言中的if、else、while和do等,这些字保留了语言所规定的含义,是编译程序识别各类语法成分的依据。几乎所有程序语言都限制用户使用保留字来作为标识符。 2 标识符:用来标记常量、数组、类型、变量、过程或函数名等,通常由用户自己定义。 3 常数:包括各种类型的常数,如整型常数386、实型常数0.618、布尔型常数TRUE等。 4 运算符:如“+”、“?”、“*”、“/”、“ ”、“ ”等。 5 界符:在语言中是作为语法上的分界符号使用的,如“,”、“;”、“(”、“)”等。 一个程序语言的保留字、运算符和界符的个数是确定的,而标识符或常数的使用则不限定个数。 2.词法分析程序输出单词的形式 我们知道,词法分析程序的输入是源程序字符串,而输出是与源程序等价的单词符号序列,并且所输出的单词符号通常表示成如下的二元式: (单词种别,单词自身的值) 1 单词种别。单词种别表示单词的种类,它是语法分析所需要的信息。一个语言的单词符号如何划分种类、分为几类、如何编码都属于技术性问题,主要取决于处理上的方便。通常让每种单词对应一个整数码,这样可最大限度地把各个单词区别开来。 对于保留字,可将其全体视为一种,也可一字一种,采用一字一种的分类方法处理起来比较方便;标识符一般统归为一种;常数可统归为一种,也可按整型、实型、布尔型等分为几种;运算符和界符可采用一符一种的分法,也可统归为一种。 2 单词自身的值。单词自身的值是编译中其它阶段所需要的信息。对于单词符号来说,如果一个种别只含有一个单词符号,那么对于这个单词符号,其种别编码就完全代表了它自身的值。如果一个种别含有多个单词符号,那么对于它的每个单词符号,除了给出种别编码之外还应给出单词符号自身的值,以便把同一种类的单词区别开来。注意,标识符自身的值就是标识符自身的字符串,而常数自身的值是常数本身的二进制数值。此外,我们也可用指向某类表格中一个特定项目的指针来区分同类中的不同单词。例如,对于标识符,可以用它在符号表的入口指针作为它自身的值;而常数也可用它在常数表的入口指针作为它自身的值。 2.1.2 状态转换图 在词法分析中,可以用状态转换图来识别单词。状态转换图是有限的有向图,结点代表状态,用圆圈表示;结点之间可由有向边连接,有向边上可标记字符。例如,图2-2表示在状态i下,若输入字符为x,则读入x并转换到状态j;若输入字符为y,则读入y并转换到状态k。 状态(即结点)数是有限的,其中必有一初始状态以及若干终止状态,终止状态 终态 的结点用双圈表示以区别于其它状态。图2-3给出了用于识别标识符、无符号整数、无符号数的状态转换图,其初始状态均用0状态表示。 当到达一类单词符号的终止状态时即可给出相应的单词编码。某些终止状态是在读入了一个其它不属于该单词的符号后才得到相应的单词编码的,这表明在识别单词的过程中多读入了一个符号,所以识别出单词后应将最后多读入的这个符号予以回退;我们对此类情况的处理是在终态上以“*”作为标识。

文档评论(0)

xinshengwencai + 关注
实名认证
内容提供者

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

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档