编译第08章.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章 词法分析 编译程序要对高级语言编写的源程序进行分析和合成,生成目标程序。 词法分析是对源程序进行的首次分析,实现词法分析的程序称为词法分析程序(词法分析器)。 8.1 词法分析概述 一. 词法分析 1. 功能 扫描源程序的字符串,按照词法规则,识别出单词符号作为输出; 对识别过程中发现的词法错误,则输出有关的错误信息。 2.词法分析器和语法分析器的关系 (1)词法分析作为单独的一遍 (2)词法分析作为子程序 8.2词法分析器的输出形式 1. 单词的种类 (1)标识符:用来命名程序中出现的类型、变量、函数、过程、标号等 (2)基本字:(关键字), 如if、while等 (3)常数:各种类型的常数 (4)运算符:如+、-、*、/等 (5)界符:如 ; 、: 等 对于一个高级程序设计语言而言,基本字、运算符、界符的数目是确定的。 标识符、常数则由用户定义,如何指定,指定多少,语言未加限制,但规定了它们应满足的词法规则。 二元式 (单词类别,单词) 第一元用于区分单词所属的类别,以整数编码。 第二元用于区分该类别中的哪一个单词符号,即单词符号的属性值 8.3 单词类别的划分 单词的编码随类别不同而不同。 基本字、运算符、界符的数目是确定的,每个单词与它的类别码为一一对应的关系,即一字一码。 它的第二元就没有意义了。 标识符通归一类。 常数可按整型、实型、字符型、布尔型等分类。 常数或标识符将由第二元----单词的属性值来区别。 通常将常数在常数表中的位置编号作为常数的属性值; 将标识符在符号表中的位置编号作为标识符的属性值。 单词输出形式 (标识符的编码,A在符号表中的位置) (:=的编码,0) (标识符的编码,B50在符号表中的位置) (+的编码,0) (整数常量的编码,10在常量表的位置 ) (;的编码,0) 状态转换图是设计词法分析器的有效工具。 有限的有向图 有向边上标记字符 唯一初态 若干终态(至少一个) 标识符的状态转换图: 一. 单词符号 标识符 begin、end、integer、if、 then else、function、read、write 无符号整型常量 -、*、、=、、=、、=、:= ;、(、) 二 状态转换图 状态转换的每个状态对应一段程序 分支状态——if或case语句 循环状态——while语句 终态——return语句 四. 一个示意算法 将会用到的变量、函数和过程。 (1)cha 字符变量,存放最新读入的字符。 (2)token 字符数组,存放已读入的字符序列。 (3)getchar() 读入字符的过程,从输入字符串中读入一个字符到变量cha中。 (4)getnbc() 读入非空白字符的函数。 (5)concat() 连接字符串的过程,把cha 中的字符连接到token数组的末尾。 (6)letter() 判断字符是否为字母的函数,若cha中的字符是字母,返回true值,否则返回false值。 (7)digit() 判断字符是否为数字的函数, (8)retract() 回退字符的过程,将刚读入cha中的字符回退到输入字符串中, 并把cha的值置为空白。 (9)reserve() 处理保留字的函数,对存放在token中的字符串查保留字表, 若查到,则返回该保留字的类别编码,否则返回0(假设0不是任何单词符号的类别编码)。 (10)buildlist () 对token中的字符串查符号表, 若查到,则返回它在符号表中的位置编号,否则将该字符串存入符号表, 并返回它在符号表中的位置编号 (11)dtb() 将token中的数字串(字符串)转换成二进制值,存入常数表中, 并返回它在常数表中的位置编号。 若已经存在,则返回它在表中的编号 (12)return(num, value) 返回二元式的函数, 其中,num为单词类别编码,value是token中的字符串在符号表中的位置编号,或是它在常数表中的位置编号,或无定义—0。 (13)error() 处理出现的词法错误的过程。 有一类词法错误可以在词法分析时发现,如出现字母表以外的非法字符、不合规则的常数等。 还有一类词法错误 如 把if写成fi,词法分析会将fi当作标识符处理; length中间多了一个空格,词法分析会将le和ngth当作两个标识符处理。 这类词法错误要推迟到语法分析时才能发现(当作语法错误)。 伪代码(每次识别一个单词符号) start: token:=‘’ ; getchar();

文档评论(0)

sunyi8246 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档