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