
第3章 词法分析 口3.1词法分析程序的设计 口手工设计3.2PL0编译程序的词法分析(理解实践) 0 自动设计原理 口3.3单词的形式化描述工具(理解) 0 34有穷自动机(掌握重点难点) 0 3.5正规式和有穷自动机的等价性(掌握重点) 口3.6正规文法和有穷自动机的等价性(了解) 口自动设计工具3.7词法分析程序的自动构造工具(了解) 本章练习 作业 课程目录 25.4.2 ☒D1
25.4.2 1 第3章 词法分析 3.1 词法分析程序的设计 手工设计 3.2 PL/0编译程序的词法分析(理解实践) 自动设计原理 3.3 单词的形式化描述工具(理解) 3.4 有穷自动机(掌握 重点 难点) 3.5 正规式和有穷自动机的等价性(掌握 重点 ) 3.6 正规文法和有穷自动机的等价性(了解) 自动设计工具3.7 词法分析程序的自动构造工具(了解) 本章练习 作业 课程目录

词法分析(Lexical Analysis)p37 0 主要功能 口从左至右逐个字符地对源程序进行扫描,产生 一个个的单词符号,把作为字符串的源程序改 造成为单词符号串的中间程序。 或者说:逐个读入源程序字符,并按照词法规 则分割成一系列单词,再转换成单词串,同时 进行词法检查。 第一阶段词法分析p2例莫C语言源程序 ■任务 main( float sum,first,count: ◆输入源程序(字符串)】 .sum-Tirst+count*10:. ◆根据语言的词法规则 输出结果 对构成原程序的学符 class value 串进行扫描和分解 保留字 main ◆识别出一个个的单词 界符一左括号 。单词内部表示形式 界符石括号 ◆三元式 界符左花括号 保留 (cla ss,value float 标识符1-idl sum 单词值参 算符乘号 整数 10 25.4.2 2
25.4.2 2 词法分析(Lexical Analysis)p37 主要功能 从左至右逐个字符地对源程序进行扫描,产生 一个个的单词符号,把作为字符串的源程序改 造成为单词符号串的中间程序。 或者说:逐个读入源程序字符,并按照词法规 则分割成一系列单词,再转换成单词串,同时 进行词法检查

3.1词法分析程序设计 (Lexical Analysis)p37 加主要任务 D:\TC\TCEXE 口读源程序,产生单词符号。 ▣其他任务 口滤掉空格,跳过注释、换行符; 口追踪换行标志,复制出错源程序; 口宏展开,. 0关键 anu keu主n 口找出单词分隔符。 25.4.2 ☒3
25.4.2 3 3.1 词法分析程序设计 (Lexical Analysis)p37 主要任务 读源程序,产生单词符号。 其他任务 滤掉空格,跳过注释、换行符; 追踪换行标志,复制出错源程序; 宏展开,. 关键 找出单词分隔符

词法分析技术应用(讨论) 口可应用于其它领域 口比如查询语言以及信息检索系统等,这种应用领域的程序 设计特点是,通过字符串模式的匹配来引发动作。 ▣又如LEX,说明词法分析程序的语言,可以看成是一个模 式动作语言。 口词法分析程序的自动构造工具也广泛应用于许多方面 ▣如用以生成一个程序,可识别印刷电路板中的缺陷。 ▣又如开关线路设计和文本编辑的自动生成等。 25.4.2 国24
25.4.2 4 词法分析技术应用(讨论) 可应用于其它领域 比如查询语言以及信息检索系统等,这种应用领域的程序 设计特点是,通过字符串模式的匹配来引发动作。 又如LEX,说明词法分析程序的语言,可以看成是一个模 式动作语言。 词法分析程序的自动构造工具也广泛应用于许多方面 如用以生成一个程序,可识别印刷电路板中的缺陷。 又如开关线路设计和文本编辑的自动生成等

3.1.1词法和语法分析器的接口方式p37 作为单独的一遍,在语法分析前进行。 与语法分析结合在一起作为一遍。 作为语法分析程序的一个子程序,每次调用识别 一个单词,交给语法分析器使用。 取单词 源程序 语法树 词法分析 送单词 语法分析 表格管理 符号表 常数表 25.4.2 ☒5
25.4.2 5 3.1.1词法和语法分析器的接口方式 p37 作为单独的一遍,在语法分析前进行。 与语法分析结合在一起作为一遍。 作为语法分析程序的一个子程序,每次调用识别 一个单词,交给语法分析器使用。 词法分析 表格管理 语法分析 源 程 序 送单词 符号表 常数表 取单词 语法树

3.1.2词法分析器程序的输出p37 0 功能:输入源程序,输出单词符号,建立自定标 识符表。 口单词符号一般可分为下列五种: 1、标识符 变量名数组名函数名 2、常数 100 3、关键字 C语言main int 4、运算符 +-米/〈〈=>=>==!= 5、界符 ,;(){} 25.4.2 ☒6
25.4.2 6 3.1.2 词法分析器程序的输出 p37 功能:输入源程序,输出单词符号,建立自定标 识符表。 单词符号一般可分为下列五种: 1、标识符 变量名 数组名 函数名 2、常数 100 3、关键字 C语言main int 4、运算符 + - * / = > == != 5、界符 ,;( ){ }

单词符号的输出形式p37-38 二元式(单词种别,属性值) 单词种别单词符号特性▣属性值单词符号特性的值 口通常用整数编码,怎样 口一个种别只含一个单词符号,不 分种,怎样编码,主要 需属性值。 取决于处理上的方便。 关键字if(if,-) 例:标识符一一1 关键字while(whlie,._) 常 数一一2 口一个种别含多个单词符号,为区 关键字 ——3 别各个单词符号需要属性值。 运算符 -4 0 表示时常用常数值、标识符的名 界符一一5 字表示。 变量i(1,指向i的符号表项) 关键字if (3,if) 关键字while(3,whlie) 25.4.2 ☒27
25.4.2 7 单词符号的输出形式 p37-38 二元式(单词种别,属性值) 单词种别 单词符号特性 通常用整数编码,怎样 分种,怎样编码,主要 取决于处理上的方便。 例:标识符——1 常 数——2 关键字——3 运算符——4 界 符——5 属性值 单词符号特性的值 一个种别只含一个单词符号,不 需属性值。 关键字if(if,_ ) 关键字while(whlie,_ ) 一个种别含多个单词符号,为区 别各个单词符号需要属性值。 表示时常用常数值、标识符的名 字表示。 变量i(1,指向i的符号表项) 关键字 if (3,if) 关键字 while(3,whlie)

例C++代码段及对应的单词符号序列 while (i>=10)i- 单词 输出表示 1 while (3,while) 2( (5, O 3 i (1, 指向i的符号表项的指针) 4 >= (4,>=) 5 10 (2, 10) 6 ) (5, ) 7 i (1, 指向i的符号表项的指针) 8 一一 (4, -) 9 (5,;) 章节目录 25.4.2 28
25.4.2 8 例 C++代码段及对应的单词符号序列 while (i>=10) i- - 单词; 输出表示 1 while (3,while) 2 ( (5,() 3 i (1,指向i的符号表项的指针) 4 >= (4,>=) 5 10 (2,10) 6 ) (5,)) 7 i (1,指向i的符号表项的指针) 8 - - (4,- -) 9 ; (5,;) 章节目录

3.2PL/0词法分析p39 口作为单独一遍考虑。 0输入: 输入串放在输入缓冲区数组1ine中。 var X,y; 口预处理 口作用剔掉源程序中无实质意义字符。 滤掉空格(空格字符字符串中空格除外)。 滤掉回车符和换行符。 跳过注释(PL/0中没有处理,请补充)。 25.4.2 ☒29
25.4.2 9 3.2 PL/0词法分析 p39 作为单独一遍考虑。 输入: 输入串放在输入缓冲区 数组line中。 var x,y; 预处理 作用 剔掉源程序中无实质意义字符。 滤掉空格(空格字符 字符串中空格除外)。 滤掉回车符和换行符。 跳过注释(PL/0中没有处理,请补充)

单词符号的识别:超前搜索 起点指示器 while (x=30 y) I 搜索指示器 超前搜索:标识符、常数和一些特殊算符、界符的 识别需要向前扫描一个字符才能被识别出来。 例 x=30*y中常数30的识别。 25.4.2
25.4.2 10 单词符号的识别:超前搜索 起点指示器 搜索指示器 超前搜索:标识符、常数和一些特殊算符、界符的 识别需要向前扫描一个字符才能被识别出来。 例 x=30*y中常数30的识别。 while (x = 30 * y)