第二章 PLO编译程序的实现.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 PLO编译程序的实现.ppt

1 1 PL/O词法分析程序功能:为语法语义分析提供单词,把输  入的字符串形式的源程序分割成一个个单词符号传递给语法  语义分析 PL/O编译程序设置的三个全程变量: SYM:存放单词的类别,如beginsym, ident, number ID: 存放用户所定义的标识符的值 NUM:存放用户定义的数 单词的种类: 基本字(保留字):BEGIN、 END、 IF、 THEN等 运算符: 如+、-、*、/、:=、#、=、=等 标识符: 用户定义的变量名、常数名、过程名 常数: 如10、25、100等整数 界符: 如‘,’、‘.’ 、‘;’ 、‘(’ 、‘)’等 词法分析程序GETSYM所要完成的任务: 滤空格、识别保留字 识别标识符、拼数 拼复合词、输出源程序 取字符过程GETCH: 图 2.6 取字符过程GETCH 2.4 PL/O编译程序的语法语义分析 语法分析的任务:识别单词符号序列是否符合给定的语法  规则 PL/O编译程序的语法分析采用了自顶向下的递归子程序法: 对应每个非终结符语法单元,编一个独立的处理过程(或子  程序) 语法分析从读入第一个单词开始由非终结符‘程序’即开始  符出发,沿语法描述图箭头所指出的方向进行分析 当遇到非终结符时,则调用相应的处理过程,从语法描述  图看也就进入了一个语法单元,再沿当前所进入的语法描  述图的箭头方向进行分析,当遇到描述图中是终结符时,  则判断当前读入的单词是否与图中的终结符相匹配,若匹  配,则执行相应的语义程序(就是翻译程序) 再读取下一个单词继续分析 遇到分支点时将当前的单词与分支点上多个终结符逐个相  比较,若都不匹配时可能是进入下一个非终结符语法单位  或是出错 如果一个PL/O语言程序的单词序列在整个语法分析中,都能  逐个得到匹配,直到程序结束符“.”,这时就说所输入的  程序是正确的,对于正确的语法分析做相应的语义解释,  生成目标代码 对PL/O语言进行语法分析时,各个非终结符语法单元所对应  的分析过程之间存在的调用关系如图2.7所示(这个调用关  系图也可称为PL/O语法的依赖图): 图 2.7 PL/0语法调用关系图 流程图如图2.8所示: 程序BLOCK过程的流程图: (1)说明部分的处理: 对每个过程说明的对象(变量,常量和过程)造名字表。  填写所在层次,标识符的属性和分配的相对位置。标识  符的属性不同时,所需填入的信息也不同。登录信息由  ENTER过程完成 名字表是全程量一维数组TABLE。TX为索引表的指针,表  中的每个元素为记录型数据。表中的LEV表示层次,DX表  示给本层局部变量分配的相对存贮位置,每说明完一个变  量后DX加1 例如,一个PL/O语言过程说明部分的片段为: CONST A=35,B=49; VAR C,D,E; PROCEDURE P; VAR G 对常量、变量和过程说明分析后,得到TABLE表中的信息  如表2.2所示: (2)过程体的处理: 程序的主体是由语句构成的 处理完过程的说明后就处理由语句组成的过程体,从语法  上对语句逐句分析 当语法正确时就生成相应语句功能的目标代码 当遇到标识符的引用时就调用POSITION函数查TABLE表,  看是否有过正确定义,若已有,则从表中取相应的有关信  息,供代码的生成使用。若无定义则调用出错处理程序 f l a f 功能码 l 层次差 a 根据不同的指令有所区别 PL/O编译程序所产生的目标代码是一个假想栈式计算机  的汇编语言,可称为类PCODE指令代码,它不依赖任何实  际计算机 指令格式如下: 2.5 PL/O编译程序的目标代码结构和代码生成 八条目标指令:( a为其他值均为非法指令) 编译程序的目标代码是在分析程序体时生成的,在处理  说明部分时一般不生成目标代码,而当分析程序体中的  每个语句时,当语法正确则调用目标代码生成过程以生  成与PL/O语句等价功能的目标代码,直到编译正常结束 PL/0语言的代码生成是由过程GEN完成。GEN有三个参  数,分别代表目标代码的功能码,层差和位移量。生成  的代码顺序放在数组CODE中。CODE为一维数组,数  组元素为记录型数据。每一个记录就是一条目标指令。  CX为指令的指针,由0开始顺序增加。实际上目标代码  的顺序是内层过程的在前边,主程序的目标代码在最后 PL/O源程序和对应的目标程序的清单: 0 jmp 0 8 8是主程序入口 1 jmp 0 2 2是P过程入口 2 int 0 3 在运行栈中申请3个栈空间 3 lod 1 3 将变量取至栈顶 4 lit 0 10 将常量10取到栈顶 5 opr 0 2 次栈顶与栈顶相加,结果放在次栈顶 6 sto 1 4 

文档评论(0)

shbky123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档