欢迎来到天天文库
浏览记录
ID:49487861
大小:469.00 KB
页数:25页
时间:2020-02-06
《编译3词法分析(zss)1.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理(第三版)陈火旺等编著(2012年9月-12月)主讲:朱世松计算机学院第三章词法分析词法分析的任务:从左至右逐个字符地对源程序进行扫描,产生一个个单词符号。词法分析器(LexicalAnalyzer)又称扫描器(Scanner):执行词法分析的程序10/7/202123.1对于词法分析器的要求一、词法分析器的功能和输出形式功能:输入源程序、输出单词符号单词符号的种类:基本字:如begin,repeat,标识符——表示各种名字:如变量名、数组名和过程名常数:各种类型的常数运算符:+,-,
2、*,/,界符:逗号、分号、括号和空白10/7/20213输出的单词符号的表示形式:(单词种别,单词符号的属性值)单词种别通常用整数编码表示。若一个种别只有一个单词符号,则种别编码就代表该单词符号。假定基本字、运算符和界符都是一符一种。若一个种别有多个单词符号,则对于每个单词符号,给出种别编码和自身的值。标识符单列一种;标识符自身的值表示成按机器字节划分的内部码。常数按类型分种;常数的值则表示成标准的二进制形式。10/7/20214例C程序代码while(i>=j)i--;输出单词符号:3、le,-><(,-><>=,-><),-><--,-><;,->10/7/20215二、词法分析器作为一个独立子程序词法分析作为一个独立的阶段,是否应当将其处理为一遍呢?作为独立阶段的优点:结构简洁、清晰和条理化,有利于集中考虑词法分析一些枝节问题。不作为一遍:将其处理为一个子程序。(当语法分析器需要一个单词符号时就调用这个子程序)10/7/20216词法分析器词法分析器语法分析器符号表源程序单词符号4、取下一单词...10/7/20217词法分析器的结构预处理子程序扫描器输入缓冲区扫描缓冲区单词符号输入列表3.2词法分析器的设计10/7/20218输入串放在输入缓冲区中。预处理子程序:剔除无用的空白、跳格、回车和换行等编辑性字符等扫描缓冲区↑↑起点搜索指示器指示器一、输入、预处理10/7/20219二、单词符号的识别:超前搜索1基本字识别:例如:DO99K=1,10DO99K=1,10IF(5.EQ.M)GOTO55IF(5.EQ.M)GOTO55DO99K=1.10IF(5)=55需要超前搜5、索才能确定哪些是基本字10/7/2021102标识符识别:字母开头的字母数字串,后跟界符或算符3常数识别:识别出算术常数并将其转变为二进制内码表示。有些也要超前搜索。5.EQ.M5.E084算符和界符的识别把多个字符符合而成的算符和界符拼合成一个单一单词符号。:=,**,.EQ.,++,--,>=10/7/202111三、状态转换图1概念状态转换图是一张有限方向图。213XY结点代表状态,用圆圈表示。状态之间用箭弧连结,箭弧上的标记(字符)代表射出结点状态下可能出现的输入字符或字符类。一张转换图6、只包含有限个状态,其中有一个为初态,至少要有一个终态。10/7/202112识别标识符的状态转换图012字母其他字母或数字*识别整常数的状态转换图012数字其他数字*一个状态转换图可用于识别(或接受)一定的字符串。10/7/2021132例子助忆符:直接用编码表示不便于记忆,因此用助忆符来表示编码。10/7/20211410/7/202115123456789101112130空白字母字母或数字非字母与数字数字非数字数字=+*非*,()其它****10/7/202116几点重要限制——不必使用超7、前搜索所有基本字都是保留字;用户不能用它们作自己的标识符基本字作为特殊的标识符来处理;不用特殊的状态图来识别,只要查保留字表。如果基本字、标识符和常数(或标号)之间没有确定的运算符或界符作间隔,则必须使用一个空白符作间隔。DO99K=1,10要写成DO99K=1,1010/7/2021173状态转换图的实现思想:每个状态结点对应一小段程序。做法:1)对不含回路的分叉结,可用一个CASE语句或一组if-else语句实现GetChar();if(IsLetter()){…状态j的对应程序段…;}el8、seif(IsDigit()){…状态k的对应程序段…;}elseif(ch=‘/’){…状态l的对应程序段…;}else{…错误处理…;}ijkl字母数字10/7/2021182)对含回路的状态结,可对应一段由WHILE结构和IF语句构成的程序.i字母或数字其它jGetChar();while(IsLetter()orIsDigit())GetChar();…状态j的对应程序段…10/7/2021193)终态结表示识别出某种单词符号,因此,对应语句为RETURN(C,VAL)其中,C为单词种
3、le,-><(,-><>=,-><),-><--,-><;,->10/7/20215二、词法分析器作为一个独立子程序词法分析作为一个独立的阶段,是否应当将其处理为一遍呢?作为独立阶段的优点:结构简洁、清晰和条理化,有利于集中考虑词法分析一些枝节问题。不作为一遍:将其处理为一个子程序。(当语法分析器需要一个单词符号时就调用这个子程序)10/7/20216词法分析器词法分析器语法分析器符号表源程序单词符号
4、取下一单词...10/7/20217词法分析器的结构预处理子程序扫描器输入缓冲区扫描缓冲区单词符号输入列表3.2词法分析器的设计10/7/20218输入串放在输入缓冲区中。预处理子程序:剔除无用的空白、跳格、回车和换行等编辑性字符等扫描缓冲区↑↑起点搜索指示器指示器一、输入、预处理10/7/20219二、单词符号的识别:超前搜索1基本字识别:例如:DO99K=1,10DO99K=1,10IF(5.EQ.M)GOTO55IF(5.EQ.M)GOTO55DO99K=1.10IF(5)=55需要超前搜
5、索才能确定哪些是基本字10/7/2021102标识符识别:字母开头的字母数字串,后跟界符或算符3常数识别:识别出算术常数并将其转变为二进制内码表示。有些也要超前搜索。5.EQ.M5.E084算符和界符的识别把多个字符符合而成的算符和界符拼合成一个单一单词符号。:=,**,.EQ.,++,--,>=10/7/202111三、状态转换图1概念状态转换图是一张有限方向图。213XY结点代表状态,用圆圈表示。状态之间用箭弧连结,箭弧上的标记(字符)代表射出结点状态下可能出现的输入字符或字符类。一张转换图
6、只包含有限个状态,其中有一个为初态,至少要有一个终态。10/7/202112识别标识符的状态转换图012字母其他字母或数字*识别整常数的状态转换图012数字其他数字*一个状态转换图可用于识别(或接受)一定的字符串。10/7/2021132例子助忆符:直接用编码表示不便于记忆,因此用助忆符来表示编码。10/7/20211410/7/202115123456789101112130空白字母字母或数字非字母与数字数字非数字数字=+*非*,()其它****10/7/202116几点重要限制——不必使用超
7、前搜索所有基本字都是保留字;用户不能用它们作自己的标识符基本字作为特殊的标识符来处理;不用特殊的状态图来识别,只要查保留字表。如果基本字、标识符和常数(或标号)之间没有确定的运算符或界符作间隔,则必须使用一个空白符作间隔。DO99K=1,10要写成DO99K=1,1010/7/2021173状态转换图的实现思想:每个状态结点对应一小段程序。做法:1)对不含回路的分叉结,可用一个CASE语句或一组if-else语句实现GetChar();if(IsLetter()){…状态j的对应程序段…;}el
8、seif(IsDigit()){…状态k的对应程序段…;}elseif(ch=‘/’){…状态l的对应程序段…;}else{…错误处理…;}ijkl字母数字10/7/2021182)对含回路的状态结,可对应一段由WHILE结构和IF语句构成的程序.i字母或数字其它jGetChar();while(IsLetter()orIsDigit())GetChar();…状态j的对应程序段…10/7/2021193)终态结表示识别出某种单词符号,因此,对应语句为RETURN(C,VAL)其中,C为单词种
此文档下载收益归作者所有