编译器的设计与实现ppt课件6异常处理

上传人:痛*** 文档编号:65824954 上传时间:2022-03-25 格式:PPT 页数:59 大小:330.50KB
收藏 版权申诉 举报 下载
编译器的设计与实现ppt课件6异常处理_第1页
第1页 / 共59页
编译器的设计与实现ppt课件6异常处理_第2页
第2页 / 共59页
编译器的设计与实现ppt课件6异常处理_第3页
第3页 / 共59页
资源描述:

《编译器的设计与实现ppt课件6异常处理》由会员分享,可在线阅读,更多相关《编译器的设计与实现ppt课件6异常处理(59页珍藏版)》请在装配图网上搜索。

1、编译器的设计与实现 -异常处理制作:张云时间:2008-04内容n目标n什么是异常处理?n异常处理模型的确立:终止模型?唤醒模型?n需要处理哪些情况?n异常的表示:标准异常与异常层次结构n异常的捕获n异常的处理:Unwindn设计与实现n符号表的设计n中间表示的设计n目标代码生成异常处理n目标:目标: 在前面的基础上增加对异常的支持以及能够进在前面的基础上增加对异常的支持以及能够进行异常处理行异常处理n问题:问题:什么是异常处理?什么是异常处理? 异常处理:一种错误处理方式异常处理:一种错误处理方式Exception handling is a programming language con

2、struct or computer hardware mechanism designed to handle the occurrence of some condition that changes the normal flow of execution. 传统的错误处理方式n在函数中返回错误信息or设置一个全局的错误状态标志 n使用标准C库中的函数:signal() (用于推断事件发生时出现了什么情况)& raise()(产生一个事件)n使用标准C库中的非局部跳转函数:setjmp() & longjmp()。使用setjmp()在程序中保存一个已知的无错误状态,一旦发生错误,就可以

3、通过调用longjmp()返回到该状态。异常处理n异常处理是C+的主要特征之一,是考虑问题和排除错误的一种更好的处理方式。使用异常处理:1)错误处理代码的编写不再冗长乏味,并且不再与“正常的”代码混和在一起。2)错误不能被忽略。如果一个函数必须向调用者发送一条错误消息,它将”抛出”一个描述这个错误的对象。如果调用者没有“捕获”并处理它,错误对象将进入上一层封装的动态范围,并且一直持续下去,直到该错误被捕获or因为程序中没有异常处理器捕获这种类型的异常而导致程序终止。程序举例抛出异常class MyError char* const data;public:MyError(char* const

4、 msg = 0) : data (msg) ;void f() / 抛出异常 throw MyError(something bad happened);int main() f();捕获异常ntry块n异常处理器n捕获所有可能的异常try / 可能会产生异常的代码 catch(type1 id1) / 处理异常1 catch(type2 id2) / 处理异常2 catch(typeN idN) / 处理异常N catch(.) / 继续正常程序. 异常匹配class Except1 ;class Except2 public: Except2(const Except1&) ;void

5、f() throw Except1(); int main() try f(); catch (Except2&) cout inside catch(Except2) endl; catch (Except1&) cout inside catch(Except1) target/没有找到对应的catchblock:/否则,没有对应的tryblock:根据保存的bp以及sp字段找到主调函数根据prev字段判断主调函数是否为空如果主调函数为空,调用terminate()函数退出否则,循环小结n如何实现了异常处理?程序设计题目(6选2)1.解决下列表达式无法计算的问题:x=a*b+c*d+e*f

6、。(可以通过增加寄存器分配功能,或者修改栈的设计,在栈上分配临时空间的方法来解决)2.取消源程序中this寄存器,按照正常的this指针入栈的方式来实现对类以及相关操作的支持。3.在原有代码基础上完善构造/析构函数解决方案(包括目标代码设计,可能需要完善语法设计);给出设计的思路,以及实现过程。注意:每道题目的实现都需要有详细的文档设计以及代码实现过程。4.设计并实现一个多继承的解决方案(包括对象模型,目标代码设计,实现需要修改语法)5.修改源程序中虚函数的实现方法,取消VCALL指令,统一使用CALL指令来解决虚函数的实现。(注意:增加CALL#立即数的功能;程序能够动态得到虚函数的入口地址。)6.设计并实现某种方法进行即时堆上空间的回收。(修改扩充delete的功能,或者借助垃圾回收机制来实现)

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!