第五章类型检查-Read.docVIP

  • 13
  • 0
  • 约3.7万字
  • 约 30页
  • 2019-05-31 发布于天津
  • 举报
第五章类型检查-Read.doc

PAGE PAGE 1 第五章 类 型 检 查 编译器必须检查源程序是否满足源语言在语法和语义两个方面的约定。这种检查叫做静态检查(以区别在目标程序运行时的动态检查),它诊断和报告程序错误。静态检查的例子有: (1)类型检查 如果算符作用于不相容的运算对象,编译器报告错误。例如数组变量和函数变量相加。 (2)控制流检查 对于任何引起控制流离开一个结构的语句,程序中必须有该控制转移可以转到的地方。例如,C的break语句引起控制离开最小包围的while, for或switch语句,如果这样的包围语句不存在,则是一个错误。 (3)唯一性检查 有些场合,对象必须正好被定义一次。例如,在Pascal语言中,标识符必须唯一地声明,case语句的分情形常量必须有区别,枚举类型的元素不能重复。 (4)关联名字检查 有时,同样的名字必须出现两次或更多次。例如,在Ada语言中,循环或程序块可以有名字出现在它的开头和结尾。编译器必须检查两个地方是否使用同样的名字。 本章集中于类型检查。上面的列举表明,大多数其它静态检查是一些简单的工作,可以用上章所讲的技术实现。其中有些工作可以并入编译器的其它部分,例如,在把名字的信息填入符号表时,可以检查该名字声明的唯一性。许多Pascal编译器把静态检查和中间代码生成组织在分析的同时完成。对于更复杂的结构,如Ada中

文档评论(0)

1亿VIP精品文档

相关文档