编译原理类型检查.ppt

编译原理类型检查.ppt

ID:51564924

大小:267.00 KB

页数:100页

时间:2020-03-23

编译原理类型检查.ppt_第1页
编译原理类型检查.ppt_第2页
编译原理类型检查.ppt_第3页
编译原理类型检查.ppt_第4页
编译原理类型检查.ppt_第5页
资源描述:

《编译原理类型检查.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第六章类型检查内容类型系统类型表达式的等价类型转换函数和运算符的重载多态函数一致化算法静态检查(staticchecking)类型检查(typecheck)操作对象必须与操作符匹配:函数名相加×控制流检查(flow-of-controlcheck)break必须退出while、for、switch…唯一性检查(uniquenesscheck)对象(变量、标号…)定义必须唯一名字关联检查(name-relatedcheck)相同名字在不同位置类型检查检查语法结构的类型与上下文匹配简单的类型检查两个类型的匹配代码生成要利用类型信息重载

2、,多态6.1类型系统语法结构、类型、将类型赋予语法结构+,-,*的两个运算数均为整数,结果为整数&的结果为指向操作对象的指针,若操作对象类型为T,结果类型为“指向T的指针”每个表达式都有一个相关联的类型类型是有结构的!——指针基本类型:语言内部支持类型结构类型:组合基本类型构成新类型6.1.1类型表达式typeexpression——用以表示语言结构的类型基本类型或用类型构造符组合基本类型基本类型:boolean,char,integer,real,type_error,void类型名类型表达式(续)类型构造符数组:T是类型表达式

3、,I为索引集合(整数范围),则array(I,T)是一个类型表达式,表示元素为类型T的数组类型intA[10];——array({0,…,9},integer)笛卡儿积:T1、T2为类型表达式,则T1×T2为类型表达式类型表达式(续)记录:与笛卡儿积的不同之处仅在于记录的域有名字。<域名,域类型>元组typedefstruct{intaddress; charlexeme[15]; }row; rowtable[101];类型表达式为:record((address×integer)× (lexeme×array({0,…,15}

4、,char)))类型表达式(续)指针:T为类型表达式,则pointer(T)为类型表达式,表示“指向类型为T的对象的指针”类型row*p;——pointer(row)函数:数学上,一个集合“定义域”到另一个集合“值域”的映射。程序语言,定义域类型D到值域类型R的映射:DR。%运算符——(int×int)intint*f(chara,charb);——(char×char)pointer(integer)不考虑函数返回数组、函数类型的情况(integerinteger)(integerinteger)可使用类型表达式变量

5、图表示类型表达式(char×char)pointer(integer)6.1.2类型系统typesystem:规则的集合 规则——将类型表达式赋予程序的不同部分类型检查程序:实现一个类型系统语法制导方式实现——嵌入语义规则6.1.2静态/动态检查静态——编译器进行 动态——运行时进行可靠类型系统,强类型语言——编译器无type_error运行时无类型错误inta[10],i;b=a[i];——需动态检查安全领域也涉及类型检查(缓冲溢出问题)6.1.4错误恢复最低要求:报告类型错误位置错误处理应融入规则中错误修正比描述正确程序更

6、困难根据错误的程序、处理缺失信息,来推测正确类型在变量使用之前无需定义它类型变量可用来处理这种问题6.2一个简单的类型检查器6.2.1一种简单语言用综合属性type保存类型表达式PD;EDD;D

7、id:TTchar

8、integer

9、array[num]ofT

10、^TEliteral

11、num

12、id

13、EmodE

14、E[E]

15、E^基本类型:char、integer、type_error例CODESomeTypesExpressionskey:integer;array[256]ofchararray(1..256,char)ke

16、ymod1999^integerpointer(integer)翻译模式PD;E{}DD;D{}Did:T{addtype(id.entry,T.type)}Tchar{T.type=char}Tinteger{T.type=integer}Tarray[num]ofT {T.type=array(1..num.val,T.type)}T^T{T.type=pointer(T.type)}Did:T的规则在符号表保存标识符类型T.type由后几个产生式语义规则计算PD;E,D在E之前,保证在检查表达式类型之前类型

17、已经保存入符号表6.2.2表达式类型检查Eliteral{E.type=char}Enum{E.type=integer}Eid{E.type=lookup(id.entry)}EE1modE2{E.type=if(E1.type==int

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。