程序分析技术第一讲:程序设计语言的发展一、程序分析的任务以程序为对象,分析其属性,如:•值的获取与传播•活跃性•……2二、程序分析技术的应用1.程序转换2.程序理解3.程序演化4.程序逆向工程35.程序验证与测试6.程序优化7.重构8.自动并行化9.……4三、程序设计语言的发展5三、程序设计语言的发展——机器语言指令:–二进制组成–具有基本操作,左移、右移、加1缺点:–可读性差(可理解性差)–写程序困难(不方便)问题:程序的维护比较困难–扩展–纠错–预防–适应6三、程序设计语言的发展——汇编语言•符号化了的机器语言•功能没有扩充•可读性强例:将(R4R5)中的双字节数取补,结果送R4R5。CMPT:MOVA,R5CPLAADDA,#1MOVR5,AMOVA,R4CPLAADDCA,#0MOVR4,ARET7三、程序设计语言的发展——高级程序设计语言(1)过程式语言PASCAL,C,FORTRAN,PL1特点:•命令为基础,程序由一系列语句组成,语句的执行引起存储单元值的变化。•程序的正确型(归纳断言指导…)•数学性质弱(副作用,变量值变化)•数据类型不够丰富•程序的动静态结构差异大8历史上的goto语句之争1970,XPL编译器只用了一个goto1972,操作系统只有五处用了标号和goto•难以理解,难以查错,动静态差异大•修改引起的副作用小,全局优化简单•概念简单,效率高9三、程序设计语言的发展——高级程序设计语言(2)函数式语言LISP,ML,HOPE,FP…程序由一组函数组成,通过调用执行程序。特点:–数学性质好–数据类型可自定义–支持并行计算–抽象级别高–数据以表为基础10三、程序设计语言的发展——高级程序设计语言(3)逻辑式语言•PROLOG•以谓词为基础,具有推理能力•特定的应用领域抽象的问题求解公式处理专家系统人工智能等11三、程序设计语言的发展——高级程序设计语言(4)对象式语言SmallTalk80•特点:–封装性–继承性–多态性12三、程序设计语言的发展——第四代语言特定领域的特殊类语言高级语言的抽象如:Oracle应用开发环境、PowerBuilder…13四、程序分析的一般方法•静态分析方法•动态分析方法14五、静态的分析过程•词法分析•语法分析•所需要的分析15