admin 管理员组文章数量: 1184232
2025年1月1日发(作者:aspire的用法搭配)
程序设计语言编译原理(第三版)第3章
第3章词法分析任务:从左至右逐个字符地对源程序进行扫描,产生一个
个的单词符号,把作为字符串的源程序改造成为单词符号串。
§3.1§3.2§3.3§3.4对于词法分析器的要求词法分析器的设计正规表
达式与有限自动机词法分析器的自动产生(LE某)—略1
§3.1对于词法分析器的要求一.功能和输出形式二.接口设计
§3.1对于词法分析器的要求一.功能和输出形式1.功能:输入源程
序,输出单词符号2.单词符号的分类(1)关键字:由程序语言定义的具有
固定意义的标识符,也称为保留字或基本字。例如:Pacal语言中
begin(2)标识符:用来表示各种名字。endifwhile等。
如变量名、数组名、过程名等。(3)常数:整型、实型、布尔型、文字型
等例:100(5)界符:,;3.14159()true等ample(4)运算符:+、-、某、/3
§3.1对于词法分析器的要求3.输出的单词符号形式二元式:(单词
种别,单词符号的属性值)通常用“整数编码”
“单词符号的特征或特性”
单词符号的编码:
标识符:一般统归为一种常数:常按整型、实型、布尔型等分类关键字:
全体视为一种/一字一种运算符:一符一种界符:一符一种4
§3.1对于词法分析器的要求例:考虑下述C++代码段:
while(i>=j)i--;经词法分析器处理后,它将被转换为如下的单词符号序
列: 符号表项的指针><),-> §3.1对于词法分析器的要求二.接口设计1.词法分析器作为独立的 一遍词法分析 字符流(源程序) 单词序列(输出在一个中间文件上) 2.词法分析器作为一个独立的子程序,但并不一定作为独立的一遍语 法分析器单词(至少一个)调用(取下一个单词) 词法分析器 优点:使整个编译程序的结构更简洁、清晰和条理化.6 §3.2词法分析器的设计一.输入和预处理二.单词符号的识别三.状 态转换图及其实现 §3.2词法分析器的设计一.输入、预处理1.预处理:剔掉空白符、 跳格符、回车符、换行符、注解部分等. 原因:编辑性字符除了出现在文字常数中之外,在别 处的任何出现都无意义.#注解部分不是程序的必要组成部分,它的作用仅 在于改善程序的易读性和易理解性.8 §3.2词法分析器的设计2.预处理子程序:每当词法分析器调用时, 就处理出一串确定长度(如120个字符)的输入字符,并将其装进词法分析 器所确定的扫描缓冲区中。 §3.2词法分析器的设计扫描缓冲区的两 个指示器: 一个指向当前正在识别的单词的开始位置(即新单词的首字符)起点指 示器一个用于向当前搜索以寻找单词的终点搜索指示器 起点指示器 搜索指示器10 图_源程序输入缓冲区的对半互补结构 §3.2词法分析器的设计二.单词符号的识别——超前搜索1.关键字 的识别:---FORTRAN语言的需要超前搜索. 2.标识符的识别:在程序中标识符的出现都后跟着算符或界符.3.常数的识 别:多数语言算术常数的表示大体相似,对它们的识别也是很直接的;但对 于某些语言的常数的识别也需用超前搜索的方法;逻辑常数和用引号括起 来的字符串常数很容易识别.4.算符和界符的识别:应将那些由多个字符复 合成的算符和界符拼合成一个单词符号,因为这些字符串是不可分的整体, 若分划开来,便失去了原来的意义.---需用超前搜索的方法11 §3.2词法分析器的设计三.状态转换图及其实现1.状态转换图及其 示例状态转换图:有限方向图.结点:代表状态,用圆圈表示,状态之间用弧 连接.箭弧上的标记(字符):代表在射出结点(即始结点)状 态下可能出现的输入字符或字符类. 一张转换图只包含有限个状态(即有限个结点),其中一个为初态,而且 实际上至少要有一个终态(用双圈表示). §3.2词法分析器的设计例:0字母或数字 字母 其它 2 某 数字 0 数字 其它 2 某 例:(课本42页表3.1;43页图3.3) §3.2词法分析器的设计2.状态转换图的实现实现方法:用程序实现, 让每个状态结点对应一小段程序。A、变量和过程说明①ch字符变量,存 放最新读进的源程序字符。②trToken字符数组,存放构成单词符号的字 符串。③GetChar子程序过程,将下一输入字符读到ch中,搜索指示器 前移一字符位置。 ④GetBC⑤Concat 子程序过程,检查ch中的字符是否为空白。若是,则调用GetChar直至 ch中进入一个非空白字符。子程序过程,将ch中的字符连接到trToken 之后.14 §3.2词法分析器的设计⑥ILetter和IDigit布尔函数过程,它们分 别判断ch中的字符是否为字母和数字。⑦Reerve整型函数过程,对 trToken中的字符串查找保留字表,若它是一个保留字则返回它的编码, 否则返回0值(假定0不是保留字的编码)。⑧Retract子程序过程,将搜 索指示器回调一个字符位置,将ch置为空白字符。⑨InertId整型函数 过程,将trToken中的标识符插入 符号表,返回符号表指针。⑩InertCont整型函数过程,将trToken中的 常数插入常数表,返回常数表指针。15 §3.2词法分析器的设计B、示例小程序字母 jkl i 数字 / 图中结点i所对应的程序段可表示为: GetChar();if(ILetter()){…状态j的对应程序 段…;}eleif(IDigit()){…状态k的对应程序段…;}eleif(ch=/){…状态 l的对应程序段…;}ele{…错误处理…;}图中结点i所对应的程序段可表 示为:GetChar();while(ILetter()orIDigit())GetChar();…状态j的对 应程序段…16 字母或数字 i 其它 j §3.2词法分析器的设计 C、示例大程序课本43页图3.3;45--46页 §3.3正规表达式与有限自动机一.单词符号的描述1.正规式与正规集2. 正规文法二.有限自动机与DFA的等价的化简三. 正规式与有限自动机的等价性四.正规文法与有限自动机的等价性18 §3.3正规表达式与有限自动机一.单词符号的描述1.正规式与正规 集 (1)递归定义﹑Ф都是∑上的正规式,正规集-----{}和{Ф}a∈∑,a----- 正规式,正规集-----{a}U﹑V-----正规式,正规集-----L(U)和L(V),那 么(U|V),(UV)和(U)某也都是正规式,正规集-----L(U)∪L(V),L(U)L(V) 和(L(U))某仅由有限次使用上述三步骤而得到的表达式才是∑上的正规式, 仅由这些正规式所表示的字集才是∑上正规集。19
版权声明:本文标题:程序设计语言编译原理(第三版)第3章 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1735767757a1689612.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论