编译原理词法分析课时分配:课时分配:66学时学时教学目的:教学目的:理解词法分析器功能及形式;熟练掌握词法分析器设计的原理,单词的描述工具,掌握正规文法、正规式、有穷自动机的相关概念及相互转换;掌握运用状态转换图进行词法分析器设计。教学重、难点:教学重、难点:正规文法、正规式、有穷自动机正规文法、正规式、有穷自动机第四章词法分析第四章词法分析((lexicalanalysislexicalanalysis))编译原理词法分析本章知识点(内容)词法分析程序的设计单词的描述工具有穷自动机正规式和有穷自动机的等价性正规文法和有穷自动机的等价性词法分析程序的自动构造编译原理词法分析编译程序首先是在单词级别上来分析和翻译源程序的。词法分析的任务是:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。因此,词法分析是编译的基础。执行词法分析的程序称为词法分析器,词法分析程序亦称为扫描器。词法分析程序的设计首页结束首页结束编译原理词法分析一、词法分析器功能和输出形式功能:输入源程序,输出单词符号。程序语言的单词符号一般分为五种:(1)关键字(保留字或基本字)(2)标识符(3)常数(整型、实型、布尔型、文字型等)(4)运算符。(5)界符(逗号、分号、括号、/*,*/等)。词法分析器输出的单词符号常常表示为二元式:(单词种别,单词符号的属性值)首页结束编译原理词法分析单词种别通常用整数编码。1、标识符一般统归为一种2、常数则宜按类型(整、实、布尔等)分种3、关键字可视其全体为一种,也可以一字一种。4、运算符可采用一符一种的分法,但也可以把具有一定共性的运算符视为一种。5、界符一般一符一种的分法。首页结束编译原理词法分析如果一个种别只含有一个单词符号,那么对于这个单词符号,种别编码就完全代表它自身了。若一个种别含有多个单词符号,那麽,对于它的每个单词符号,除了给出种别编码之外,还应给出有关单词符号的属性信息。单词符号的属性是指单词符号的特征或特性。属性值则是反映特性或特征的值。【例如】对于某个标识符,常将存放它有关信息的符号表项的指针作为其属性值;对于某个常数,则将存放它的常数表项的指针作为其属性值。首页结束编译原理词法分析作为例子考虑下述C++代码段:while(i>=j)i--;经词法分析器处理后,它将转换为如下的单词符号序列:<(的编码,-><标识符编码,指向i的符号表项的指针〉<>=的编码,-><标识符编码,指向j的符号表项的指针><),-><标识符编码,指向i的符号表项的指针><--编码,-><;的编码,->首页结束编译原理词法分析【例如】单词符号类别编号标识符1常数2if3then4else5program6begin7end8+9-10*11单词符号类别编号/12(13)14>15>=16<17<=18<>19:=20;21.22,23单词种别编码首页结束编译原理词法分析可使整个编译程序的结构更简沽、清晰和条理化。也可以把词法分析器安排成一个子程序,每当语法分析器需要一个单词符号时就调用这个子程序。每一次调用,词法分析器就从输人串中识别出一个单词符号,把它交给语法分析器。词法分析器作为独立子程序首页结束编译原理词法分析二、词法分析器的设计1、输入、预处理词法分析器工作的第一步是输入源程序文本。输入串一般放在一个缓冲区中,这个缓冲区称输入缓冲区。词法分析器的工作可以直接在这个缓冲区中进行。但在许多情况下,把输入串预处理一下,对单词符号的识别工作将是比较方便的。预处理工作包括对空白符、跳格符、回车符和换行符等编辑性字符的处理,及删除注解等。我们可以设想构造一个预处理子程序,他完成上面的工作。每当词法分析器调用它时就处理出一串确定长度的输入字符,并将其装入词法分析器所指定的缓冲区中(称为扫描缓冲区)。这样分析器就可以在此缓冲区中直接进行单词符号的识别工作。首页结束编译原理词法分析扫描缓冲区进行扫描时一般用两个指示器,一个指向当前正在识别的单词的开始位置(指向新单词的首字符),另一个用于向前搜索以寻找单词的终点。首页结束编译原理词法分析源程序串输入缓冲区列表预处理子程序扫描器单词符号扫描缓冲区图图11词...