• 1.86 MB
  • 2022-04-29 14:34:22 发布

最新工作汇报类幻灯片模板课件PPT.ppt

  • 92页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'工作汇报类幻灯片模板 前言/PREFACE岁月流转,时光飞逝,转眼间2018年的工作又接近尾声。回首过去一年的工作,经过全体领导及员工的共同努力,公司经营业绩保持良好,行业地位、社会形象日渐提升,各项工作全面发展。新起点、新希望。站在2019年的起点,我们将继承和发扬过去工作中存在的优点,汲取经验,摒弃不足,满怀信心,以更清醒的头脑、更旺盛的斗志、更奋发的姿态和更充沛的干劲,向我们的既定目标进发! 目录/Contents0102030405年度工作内容概述工作完成具体情况成功项目详细展示工作存在不足之处明年工作目标计划 添加标题点击输入本栏的具体文字,简明扼要的说明分项内容。点击输入本栏的具体文字,简明扼要的说明分项内容。点击输入本栏的具体文字,简明扼要的说明分项内容。点击输入本栏的具体文字,简明扼要的说明分项内容。点击输入本栏的具体文字,简明扼要的说明分项内容。点击输入标题内容 点击输入标题内容写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。添加关键字添加关键字添加关键字添加关键字 输入文本点击输入文本点击输入标题文本点击输入标题文本点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题文本点击输入标题内容 02工作完成具体情况点击此处添加副标题文本内容 点击输入标题内容点击添加标题添加内容单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本点击添加标题单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本点击添加标题单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本单击此处添加文本 点击输入标题内容点击添加文本点击添加文本点击添加文本点击添加文本您的内容打在这里,或者通过复制您的文本后,在此框中选择粘贴,并选择只保留文字。您的内容打在这里,或者通过复制您的文本后,在此框中选择粘贴,并选择只保留文字。您的内容打在这里,或者通过复制您的文本后,在此框中选择粘贴,并选择只保留文字。 点击输入标题内容点击输入标题内容点击输入标题内容点击输入标题内容点击输入标题内容详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题内容 点击输入标题内容观点一:详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。添加标题内容观点二:详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。观点三:详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。结论一:详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。添加标题内容结论二:详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。结论三:详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。 详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。35%点击输入文本点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。80%点击输入文本点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。95%点击输入文本点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。25%点击输入文本点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。14%点击输入文本点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。23%点击输入文本点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题内容 03成功项目详细展示点击此处添加副标题文本内容 点击输入标题内容添加关键字点击添加标题内容添加关键字添加关键字添加关键字添加关键字详写内容……点击输入本页需要详写的文字内容,简明扼要,此为概念图解,根据您的具体内容酌情修改。 详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入内容点击输入内容点击输入内容点击输入内容点击输入内容点击输入标题内容 点击输入标题内容点击添加文字点击添加文字点击添加文字点击添加文字点击添加文字点击点击添加小标题您的内容打在这里,或者通过复制您的文本后,在此框中选择粘贴,并选择只保留文字。您的内容打在这里,或者通过复制您的文本后,在此框中选择粘贴,并选择只保留文字。点击添加小标题 点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。01020304输入文本点击输入标题内容 输入文本内容输入文本内容输入文本内容输入文本内容输入文本内容12345详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题内容 04工作存在不足之处点击此处添加副标题文本内容 详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题文本详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题文本详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题文本详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题文本点击输入标题内容点击输入标题内容 点击输入标题内容0102030405详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改添加标题内容添加标题内容添加标题内容添加标题内容添加标题内容点击添加标题内容 点击输入标题内容详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。字号请根据你的内容多少,及演示需要调整大小。添加标题添加标题详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。字号请根据你的内容多少,及演示需要调整大小。 点击输入标题详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题点击输入标题详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入标题点击输入标题内容 点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容。点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容。点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容。点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容。点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容点击输入标题文本点击输入本栏的具体文字,简明扼要的说明分项内容12345678点击输入标题内容 05明年工作目标计划点击此处添加副标题文本内容 点击输入标题内容详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改添加标题内容输入文本内容输入文本内容输入文本内容输入文本内容详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改添加标题内容详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改添加标题内容详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改添加标题内容添加标题添加标题添加标题添加标题 点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。86%点击输入标题点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。76%点击输入标题点击输入标题内容点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。53%点击输入标题点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。38%点击输入标题 详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。详写内容……点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。点击输入本栏的具体文字,简明扼要的说明分项内容,此为概念图解,请根据您的具体内容酌情修改。Q1点击输入您的问题标题文本内容?Q3点击输入您的问题标题文本内容?Q2点击输入您的问题标题文本内容?点击输入标题内容 点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题内容点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题内容点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题内容点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题内容点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题内容点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题内容点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题内容点击输入本栏的具体文字,简明扼要的说明分项内容,请根据您的具体内容酌情修改。点击输入标题内容点击输入标题内容 点击输入标题内容020103您的内容打在这里,或者通过复制您的文本后,在此框中选择粘贴,并选择只保留文字。点击添加标题内容您的内容打在这里,或者通过复制您的文本后,在此框中选择粘贴,并选择只保留文字。点击添加标题内容您的内容打在这里,或者通过复制您的文本后,在此框中选择粘贴,并选择只保留文字。点击添加标题内容 汇报完毕感谢观看框架完整的年终总结、工作汇报、述职报告PPT模板 第四章程序语言的性质37 语言的形式化模型BNF为描述程序设计语言的属性提供了一种很好的手段,但并不是充分的手段。BNF回答了程序看起来象什么,但没有回答程序是做什么的。形式化模型采用精确的数学模型来刻画研究对象,为研究、分析和操纵研究对象提供严谨的数学工具和手段。本章将介绍下列形式化模型:形式文法:乔姆斯基文法分级语言的语义:属性文法、指称语义程序的验证38 4.1语言的形式化性质乔姆斯基分级文法语言的能力39 乔姆斯基分级文法文法由非终结符、终结符、开始(非终结)符、及产生式构成文法的类别3型文法:正则文法,定义词法的模型2型文法:BNF文法,上下文无关文法1型文法:上下文有关文法0型文法:40 3型文法:正则文法为词法分析器提供模型。这类文法的大多数性质都是可判定的如,能产生什么样的串、给定串是否属于文法规定的语言、语言中的串是否有限等正则文法可以产生形如an的串,其中a为有限字符序列正则文法只能计数有限数常用于关键字或单词扫描41 2型文法—上下文无关文法产生式的形式为:X,其中可以是终结符和非终结符的任意序列同样,这类文法的大多数性质都是可判定的如,能产生什么样的串、给定串是否属于文法规定的语言、语言是否为空等可用来计数和比较两个项,产生形如ancbn的串可以用堆栈来实现可用来自动产生程序的语法分析树2型和3型文法的相关问题都已基本上得到解决42 1型文法—上下文有关文法产生式的形式为:,其中任意非终结符串,是终结符和非终结符的任意序列,但中的符号个数应不多于的符号个数从开始符开始导出的串的长度是递增的在生成串时,需要使用固定数量的存储空间,例如识别上下文无关文法无法识别的串ancnbn上下文有关文法太复杂,很难用于程序设计语言人们对上下文有关文法的很多特征还不太清楚43 0型文法—非限定型文法对产生式的形式没有任何限制可用来识别任意可计算的函数其大多数性质都是不可判定的返回44 不可判定性不同类型的文法越来越复杂,产生的语言也越来越复杂,但是否说明计算机解决问题的能力可以越来越强,没有限制?例如:能否编写一个C语言程序来判断另一个C语言程序能否结束?但这基本上是不可能的,这不是编程人员的问题,而是因为计算机所基于的数学模型本身的局限性而导致的。45 图灵机一般来说,用一种语言编写的程序也可以用其他另一种语言来实现。那么是否存在某个程序,只能用某种语言来实现,而用其他语言就无法实现?如果没有,那么有哪些程序是其它程序设计语言无法表示的,为什么还需要那么多种不同的语言?如果我们将能够表示所有计算的语言都称为通用语言,那么是不是所有语言都是通用语言?如果是,是否存在更简单的通用语言?46 图灵机的结构图灵机是一种用来定义可计算函数的抽象计算机图灵机只有一个单一的数据结构,即一个称为“带子”的可变长线性数组带子被分为很多格,每格上只包含一个字符图灵机还有一个指针变量,称为“读出头”,它总是指向带子上的某个格。47 图灵机的操作图灵机只提供几个简单的操作:读出头所指定位置的字符可以被读出或被修改。程序可以根据读出的值进行转移。读出头可以左右移动。如果读出头移动到带子的最末端,则自动在带子上加上一格,并赋予一个空字符作为初始值。48 图灵机的运行图灵机开始运行时,带子上存放输入数据,读出头指向输入数据的最左端的字符;图灵机根据预先编好的操作序列读写带子上的数据、或移动读出头;如果最终能够停机,则带子上的内容就是最后的输出结果。49 图灵机的能力任意可计算函数都可以用图灵机计算出来(Church论题)图灵机等价于0型文法确定型图灵机等价于非确定型图灵机。50 停机问题是否存在某个通用的算法,它能够断定任意给定的图灵机在任意的输入下能否停机?停机问题是不可判断的,即不存在这样的通用算法。任意一个不可判断的问题,都等价于停机问题。结论:任何一种程序设计语言都可能代替其它语言程序设计语言不存在质的区别,只有量的区别,如是否优美、易用、高效等任何一种程序设计语言都有它存在的理由返回51 4.2语言的语义程序设计语言基本上都是以上下文无关文法(特别是LR(k)文法)的核心设计的。但语法分析已经不再是人们感兴趣的研究问题了。现在的问题是如何确定程序的含义(即语义)。52 语言的语义语言的手册必须定义语言中每个结构的含义,包括单独结构的含义以及和其他结构组合时的含义。语言提供了不同结构,用户(为了写正确的程序,预测语句的执行效果)和实现者(正确地实现语言)需要这些结构的精确定义。大多数语言中,形式文法用于定义语法,一段文字或例子用于定义语义,但定义是不精确的,有二义性,不同作者可能有不同理解。语义定义问题还是理论研究的目标,但至今没有令人满意的解答。已有各种形式方法用于语义定义。53 语义建模(1)—文法模型对定义语言的BNF文法进行扩展,给出程序的语法分析树,从树中抽取出附加信息。属性文法便是抽取附加信息的一种方式。54 语义建模(2)—命令或操作模型定义程序如何在某虚拟机上执行。通常描述为一自动机,但比语法用的简单自动机远为复杂。自动机有内部状态——对应程序执行时的内部状态,包括所有变量的值、执行程序本身、以及各种系统定义的数据结构。55 语义建模(2)—命令或操作模型一组形式定义的操作用于刻划自动机内部状态如何改变。此外还需定义程序文本如何翻译成自动机的初始状态。语言的操作定义对语言如何实际执行给出了相当直接的抽象。也可能提出一个更抽象的模型,作为语言的软件解释的基础。70年代的VDL(ViennaDefinitionLanguage)是一个操作方法。它扩展语法分析树已包含机器解释器。计算的状态是程序树加上描述机器中所有数据的树。每条语句的执行使树的状态发生变化。56 语义建模(3)—作用型模型试图直接构造每个程序的函数的定义,采用层次式的构造方式。程序中每个基本的或程序员定义的操作代表一个数学函数。语言的程序控制结构用于将这些函数复合为更大的序列,代表表达式和语言。语句序列和条件分叉表示为个体函数构造而成的函数。循环通常表示为递归函数。最终,为整个程序导出一个完整的函数模型,指称语义归于此类。57 语义建模(4)—公理模型使用谓词演算,每个语法结构的语义被描述为公理或推导规则,用于导出结构的执行效果。从一个初始假设开始,假设输入变量满足一定的约束,在程序语句执行后,使用公理和推导规则来推导其他变量值需满足的限制,最终,程序的结果被证明满足希望的约束(描述了它们的值和输入值的关系)。如Hoare的公理语义。58 语义建模(5)—规约模型描述实现程序的各个函数的关系,只要我们可以证明一个实现符合了所有的函数间的关系,则称实现相对于规约是正确的。代数数据类型是形式规约的一种形式。例如:实现栈的程序,S表示栈,则有公理,pop(push(S,x))=S任何一个实现如果能保持这种关系,则称是栈的正确实现。59 语义模型—小结上述各种形式语义模型各有优点,但均不能称为完全实用的和适用的,各有其适合范围。操作语义为语言的实现提供了一种形式模型,但对用户来说太细节公理语义易于理解,但很难用来定义复杂的程序设计语言,且缺乏对语言实现的支持返回60 语义建模—属性文法这是最早的开发语义模型的工作之一。其思想是对分析树中的每个结点关联一个函数,从而给出结点的语义内容。属性文法的创建过程是为文法中的每一条规则都定义相关的语义函数。继承属性是一个函数,它将树中非终结符值和树中更高层的非终结符值相关联。换言之,任何规则右端的非终结符的函数值是左端非终结符的函数。综合属性是一个函数,它将左端非终结符和右端非终结符的值相关联,这些属性在树中向上传递信息,即从树中下层信息进行“综合”。61 属性文法例:考虑算术表达式的简单文法。E→T|E+TT→P|T×PP→I|(E)其语义通过文法中非终结符间的关系集合定义。如:下面函数生成该文法生成的任意表达式的值:产生式属性E→E+TValue(E1)=V(E2)+V(T)E→TV(E)=V(T)T→T×PV(T1)=V(T2)×V(P)T→PV(T)=V(P)P→IV(P)=数I的值P→(E)V(P)=V(E)62 属性文法下图是一个属性树,它给出了表达式2+4×(1+2)值63 属性文法属性文法可用于在语法树中传递语义信息。例如,声明信息可以通过语言的声明产生式收集。沿树向下传的符号表信息可用于生成表达式代码。下面属性可加到非终结符来创建一个程序中声明的名字集合。产生式属性::=decl_set(declaration1)=declaname(decl)∪decl_set(declaration2)::=decl_set(declaration)=decl-name(decl)::=declarexdecl-name(decl)=x(decl)::=declareydecl-name(decl)=y(decl)::=declarezdecl-name(decl)=z这是综合属性,包含程序中声明的名字集合。该属性可以沿树向下传递,成为继承属性,用于正确地生成数据的代码。64 属性文法的使用首先创建语法分析树。属性文法假设你已经知道表达式是如何推导出来的,它并不关心是如何分析推导出来的。定义属性的函数可以是任意给定的,因此定义属性的过程完全是手工完成的。如果只有综合属性,并且文法是LR(k),那么,属性文法可以用来在语法分析时自动产程中间代码。这就是YACC如何工作的,它利用属性文法来计算所有非终结符的值。在构造分析树时,非终结符的信息逐层向上传递给分析树上层的非终结符。语法分析完毕,所有属性的值将计算出来。返回65 指称语义指称语义是一种用来描述程序设计语言的语义的作用型语义模型指称语义基于-演算66 -演算-演算是一种和图灵机的计算能力相当的理论计算模型-演算可以作为程序设计语言的函数调用的模型Algol和Lisp都采用来-演算的函数调用语义指称语义是对-演算的扩充,它将-演算扩充为一种通用的数据类型理论67 -演算的表达式-表达式可以递归地定义如下:变量名为-表达式如果M为一个-表达式,则x.M也是一个-表达式如果F和A都是-表达式,则(FA)也是-表达式,其中F为操作符,A为操作数。形式语法:-expr::=id|id.-expr|(-expr-expr)x相当于申明参数变量x,没有申明的变量为自由变量,否则为约束变量。x.M相当于函数申明,其中x相当于M的参数。例如:xx.xx.(xy)x.y(x.xy.y)68 -表达式的操作-表达式只有一种操作:约简(FA)约简相当于将A作为实际参数,替换F的形式参数的所有出现(x.MA)M’,相当于用A替换M中x的所有自由出现。例如:(x.xy)y(x.(xy)x.x)x.xyy注意:约简并不一定能简化原来的表达式(x.(xx)x.(xx))(x.(xx)x.(xx))……69 指称语义指称语义的基本思想是定义一个语义函数(指称函数),把程序的意义映射到某种意义清晰的数学对象(就像用中文解释英文)作为被指的数学对象可以根据需要选择对于简单的程序语言,一种很自然的选择是把程序的语义定义为(指称为)从状态到状态的函数。定义语义就是定义好每个程序对应的函数。程序的状态由标识符到值的映射集合构成S={id|value,…}70 指称语义表达式的语义[e]Sval语句的语义[s]SS程序的语义[m]valval71 指称语义设为程序的当前状态表达式的语义常数:[n]=n变量:[x]=(x)算术表达式:[e1+e2]=[e1]+[e2]语句的语义赋值语句:[x=e]={x|[e]}复合语句:[s1;s2]=[s2]([s1])条件语句:[ifbthens1elses2]=if[b]then[s1]else[s2]程序的语义[m]valval返回72 程序验证在编程时,人们越来越关心程序的正确性和可靠性。人们在设计程序设计语言时,也希望通过增加新的特征来增强程序的正确性和可靠性。我们可以用程序语义,按以下方式来探讨程序的正确性问题:给定程序P,其含义是什么?即,它的规范描述S是什么?给定规范描述S,开发实现了该规范描述的程序P规范描述S和程序P是否完成了相同的功能(执行了相同的函数)?相当于语义建模问题软件工程的核心问题程序验证的核心问题73 程序验证测试不能保证程序的正确性如果能找到不依赖于测试的保证程序正确性的方法,产生的程序就能更加可靠:程序计算了一个函数如果能给出该函数的规范描述,并且能够根据程序知道它到底计算了一个什么样的函数,那么,如果能够证明程序所计算的函数与给定的函数等价或相同,就能证明程序的正确性,而不需再测试。74 形式化的规范描述任一程序都可以表示成流程图基调:函数名:定义域值域fun1:S1andP1S3fun2:S1andnot(P1)S3fun3:S3andnot(P3)S4fun4:S3andP3S4S2andP2=S4S2andnot(P2)=S3P1P2P3Fcn1Fcn4Fcn3Fcn2S1S2S3S475 形式化的规范描述(续)这样,程序可以看成是一个定义在其基本成分上的复杂函数:C(fun1,fun2,fun3,fun4,p1,p2,p3):S1S4如果我们能够形式化地推导出上述关系,那么我们就能够从数学上证明,给定S1,程序将终止于状态S4。但是:证明非常困难。另外,在证明时,我们总是想证明程序和某个给定的形式化规范等价,但问题是,如果没有给出规范描述,“程序是否正确?”可能就没有了意义。76 公理化验证用谓词逻辑公式来刻画程序的语义、用谓词演算来验证程序的正确性。TonyHoare在1969年提出的。每个程序都遵循某种形式化的公理定义。实证(Validation):通过一系列测试数据的测试,展示程序满足了其规范描述。验证(Verification):根据程序结构,通过形式化的讨论,展示程序满足了其规范描述。Validation一般认为需要执行程序,而verification不需要。77 谓词逻辑公理{P1}S{P2}表示如果P1为真,则在S执行并终止后,P2将为真。如果A为真,则B也为真。逻辑公理:组合顺序1顺序2{P}S1{Q},{Q}S2{R}[组合语句]{P}S1;S2{R}{P}S{R},RQ[增加后置条件]{P}S{Q}PR,{R}S{Q}[增加前置条件]{P}S{Q}78 语句类型的公理条件语句1条件语句2While循环语句赋值语句{P^B}S{Q},P^not(B)Q{P}ifBthenS{Q}{P^B}S1{Q},{P^not(B)}S2{Q}{P}ifBthenS1elseS2{Q}{P^B}S{P}{P}whileBdoS{P^not(B)},其中P为不变式{P(e)}x:=e{P(x)},P(x)为x的谓词。79 公理化的程序证明给定程序:s1;s2;s3;s4;…sn及其规约:P和QP为前置条件Q为后置条件通过证明下列的谓词来证明{P}s1;…sn{Q}:{P}s1{p1}{p1}s2{p2}…{pn-1}sn{Q}反复运用组合公理,产生:{P}s1;…;sn{Q}80 例子{B>=0}1X:=B2Y:=03whileX>0do4begin5Y:=Y+A6X:=X-17end{Y=AB}即,给定非负的B,证明当程序终止时,Y=A*B.81 证明过程概要一般通过回溯来进行。首先,找到循环的不变式:Y为乘积的一部分,X为剩下的乘数因此,Y和X*A必须是所需的乘机,即不变式Y+X*A=A*B就是建议的不变式可以试着用(Y+X*A=A*BandX>=0)作为不变式82 证明赋值语句公理(6):{(Y+(X-1)A=A*BandX-1>=0)}X:=X-1{(Y+X*A=A*BandX>=0)}赋值语句公理(5):{((Y+A)+(X-1)A=A*BandX-1>=0)}Y:=Y+A{(Y+(X-1)*A=A*BandX-1>=0)}组合公理(5,6):{(Y+A)+(X-1)*A=A*BandX-1>=0)}Y:=Y+A;X:=X-1{(Y+X*A=A*BandX>=0)}数学定理:Y+X*A=A*BandX>0((Y+A)+(X-1)*A=A*BandX-1>=0)顺序语句公理:{Y+X*A=A*BandX>0}Y:=Y+A;X:=X-1{(Y+X*A=A*BandX>=0)}数学定理:(Y+X*A=A*BandX>=0)and(X>0)Y+X*A=A*BandX>0顺序语句公理:{(Y+X*A=A*BandX>=0)and(X>0)}Y:=Y+A;X:=X-1{(Y+X*A=A*BandX>=0)}[用**来代替]While循环语句公理:**{Y+X*A=A*BandX>=0}whileX>0doY:=Y+A;X:=X-1{(Y+X*A=A*BandX>=0)andnot(X>0)}83 证明(续)数学定理:(Y+X*A=A*BandX>=0)andnot(X>0)(Y+X*A=A*BandX=0)Y=AB顺序语句公理:{Y+X*A=A*BandX>=0}whileX>0doY:=Y+A;X:=X-1{Y+A*B}赋值语句公理:{0+X*A=A*BandX>=0}Y:=0{Y+X*A=A*BandX>=0}赋值语句公理:{0+B*A=A*BandB>=0}X:=B{0+X*A=A*BandX>=0)}组合公理:{0+B*A=A*BandB>=0}X:=B;Y:=0{Y+X*A=A*BandX>=0)}数学定理:(B>=0)0+B*A=A*BandB>=0顺序语句公理:{B>=0}X:=B;Y:=0{Y+X*A=A*BandX>=0)}组合公理:{B>=0}program{Y=A*B}84 公理化验证—小结需要为语言的所有特征建立公理,能否也为简单数组、过程调用、参数等建立公理?即使是要证明小程序也很困难,要证明大型程序就更困难了。还不能很好地处理非数学方面的问题,处理起来极端困难。很难自动化,而手工又会导致大量错误。但是准确,能够清楚地区别“程序是什么”以及“程序是如何解决问题”它是大多数其他验证方法的基础,包括半形式化的规范表示法。对于关键应用,付出的代价还是值得的。85 程序验证只有程序正确性的验证过程能够自动化,程序验证才有实际意义但要证明那些没有结构化的程序、以及那些具有复杂结构的程序的正确性,非常困难,基本上是不可能的。程序验证工作的研究成果通常用来指导程序设计语言的设计例如,在C++中加断言等。86 ML概述ML(元语言)是一种函数式语言,其程序的形式与C或Pascal相似。ML由RobinMilner于1970年代中期开发,是一种机器辅助形式化证明的机制。ML也可以作为一种通用符号操纵语言。1983,该语言中加入了模块等概念,并经过重新设计,形成了现在的标准ML。ML是一种具有静态类型、强类型、和函数式执行的语言,但类型不必由程序员来指定。ML程序由若干个函数定义构成。每个函数的类型是静态的,函数可以返回任意类型的值。因为是函数型的语言,变量的存储与C或Fortran语言的很不相同。ML可以通过其类型系统支持多态,还支持数据抽象。87 ML程序例子1fundigit(c:string):int=ord(c)-ord("0");2(*Storevaluesasalistofcharacters*)3funSumNext(V)=ifV=[]then(print("nSum=");0)4else(print(hd(V));5SumNext(tl(V))+digit(hd(V)));6funSumValues(x:string):int=SumNext(explode(x));7funProcessData()=8(letvalinfile=open_in("data.sml");9valcount=digit(input(infile,1))10in11print(SumValues(input(infile,count)))12end;13print("n"));88 把一个列表颠倒过来的函数datatypelist[a,b,c,d,e]hd(x):列表的头,或第一个元素tl(x):列表的尾,或除第一个元素外的元素x::y表示头为x,尾为y的列表x@y表示连接列表x和yfunreverse(L)=ifL=nilthennilelsereverse(tl(L))@[hd(L)];目标:将颠倒列表变成一个更简单的函数:列表要么是空的,否则,对表头和表尾进行处理将表尾颠倒,然后把表头连到后头。89 ML模式匹配上面的函数也可以写成:funreverse(x::y)=reverse(y)@[x]|reverse([])=[];在这个格式中,模式匹配就是寻找可以运用的函数定义:如果列表不为空,则匹配x::y;否则,匹配[]。90 ML的类型列表Lists:[a,b,c,d,e]所有的元素具有相同的类型元组Tuples:(“a”,1,2.3)简化的静态记录记录Records:{1=“a”,2=1,3=2.3}给出了选择子的名字构造动态的任意结构:datatypemoney=penny|nickel|dime;valx=penny;为常量设定值零钱的记录:datatypechange=coinsofmoney*int;coins(penny,3)类型为change的对象构造函数处理零钱:funNumPennies(coins(penny,x))=x;valx=coins(penny,5);NumPennies(x);valit=5:int;91 ML的结构硬币袋(Bagsofcoins):datatypecoinbag=bagofcoinbag*coinbag|itemofchange|empty;funValuechange(coins(penny,X))=X|Valuechange(coins(nickel,X))=5*X|Valuechange(coins(dime,X))=10*X;funCountchange(bag(X,Y))=Countchange(X)+Countchange(Y)|Countchange(item(X))=Valuechange(X)|Countchange(Empty)=0;函数的使用:valx=bag(item(coins(dime,3)),item(coins(nickel,7)));Countchange(x);valit=65:int92'