第七章 (2)类型检查和类型转换.pptVIP

  • 5
  • 0
  • 约1.2千字
  • 约 9页
  • 2018-10-19 发布于山东
  • 举报
7.3 类型检查和类型转换 一、类型检查 类型检查是静态语义分析的重要工作之一,但为方便起见,我们把类型检查的工作也放在中间代码生成时进行。 类型检查主要有以下几种: ⑴ 各种条件表达式的类型是否是布尔类型? ⑵ 运算符的运算分量是否相容? ⑶ 赋值语句的左、右部类型是否相容? ⑷ 实参与形参的类型是否相容? ⑸ 下标表达式的类型是否为所允许的类型? ⑹ 函数说明中的函数类型与返回值的类型是否一致? 类型检查的语法单位 二、类型转换 由于一些语言允许运算分量的类型不同,所以在检查运算符分量类型是否相容的同时,可能还需要对某一运算分量做类型转换。 7.4 中间代码生成中的几个问题 如果符号表一直保存到目标代码生成阶段,则在四元式中标识符的地址可用其在符号表中的地址表示。 如果符号表不保存到目标代码生成阶段,则需要把目标代码生成阶段对名字进行地址分配所需要的相关信息放到中间代码中,这些信息包括标识符抽象地址(层数、偏移)以及直接 ? 间接访问等信息,具体地说这些信息应放在四元式中的操作分量或运算结果的地址表示中。 关于临时变量的地址表示: 临时变量没有层数概念,因此对临时变量的层数可以取任意一个负数,如取-1; 在中间代码生成阶段尽管产生大量的临时变量,但经过优化后,只有少部分临时变量能保留下来,这样在中间代码生成阶段还不能确定临时变量的Offset值,因此临时变量的地址表示中的Offset暂时取临时变量的编号。 本教材中我们采用了在中间代码生成时进行类型检查的方法,而不是在目标代码生成时进行类型检查,所以在中间代码的地址表示中不必包含类型信息。 尽管在实际的四元式中间代码中各运算分量或运算结果都应该是地址表示,但为了简便起见,本章在生成的四元式中间代码中,我们只写变量名或临时变量名,而不是用地址形式。 表达式的四元式中间代码 运算分量类型只考虑整型和实型的情况. 表达式涉及的操作码: 加法(ADDI, ADDF) 减法(SUBI, SUBF) 乘法(MULTI, MULTF) 除法(DIVI, DIVF) 类型转换(FLOAT) * * C语言:return语句 ⑹ 函数说明中的函数类型与返回值的类型是否一致? 下标变量 A[i][j] ⑸ 下标表达式的类型是否为所允许的类型? 过程调用语句、函数调用语句 ⑷ 实参与形参的类型是否相容? 赋值语句 ⑶ 赋值语句的左、右部类型是否相容? 表达式 ⑵ 运算符的运算分量是否相容? C语言:if语句,while语句,do-while语句,for语句。 ⑴ 各种条件表达式的类型是否是布尔类型? 类型检查的语法单位 类型相容性检查项目 do 语句; while(表达式); while(表达式) 语句; for ( [表达式 1]; [表达式 2 ]; [表达式3] )语句; *

文档评论(0)

1亿VIP精品文档

相关文档