第四章程序语言的性质课件.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章程序语言的性质课件.ppt

形式化的规范描述 任一程序都可以表示成流程图 基调:函数名:定义域 ? 值域 fun1: S1 and P1 ? S3 fun2: S1 and not(P1) ? S3 fun3: S3 and not(P3) ? S4 fun4: S3 and P3 ? S4 S2 and P2 = S4 S2 and not(P2) = S3 P1 P2 P3 Fcn1 Fcn4 Fcn3 Fcn2 S1 S2 S3 S4 精选 形式化的规范描述(续) 这样,程序可以看成是一个定义在其基本成分上的复杂函数: C(fun1, fun2, fun3, fun4, p1, p2, p3): S1 ? S4 如果我们能够形式化地推导出上述关系,那么我们就能够从数学上证明,给定S1, 程序将终止于状态 S4。 但是:证明非常困难。 另外,在证明时,我们总是想证明程序和某个给定的形式化规范等价,但问题是,如果没有给出规范描述,“程序是否正确?”可能就没有了意义。 精选 1型文法—上下文有关文法 产生式的形式为:? ? ?, 其中?任意非终结符串, ?是终结符和非终结符的任意序列,但?中的符号个数应不多于?的符号个数 从开始符开始导出的串的长度是递增的 在生成串时,需要使用固定数量的存储空间,例如识别上下文无关文法无法识别的串ancnbn 上下文有关文法太复杂,很难用于程序设计语言 人们对上下文有关文法的很多特征还不太清楚 精选 0型文法—非限定型文法 对产生式的形式? ? ?没有任何限制 可用来识别任意可计算的函数 其大多数性质都是不可判定的 返回 精选 不可判定性 不同类型的文法越来越复杂,产生的语言也越来越复杂,但是否说明计算机解决问题的能力可以越来越强,没有限制? 例如:能否编写一个C语言程序来判断另一个C语言程序能否结束? 但这基本上是不可能的,这不是编程人员的问题,而是因为计算机所基于的数学模型本身的局限性而导致的。 精选 图灵机 一般来说,用一种语言编写的程序也可以用其他另一种语言来实现。 那么是否存在某个程序,只能用某种语言来实现,而用其他语言就无法实现? 如果没有,那么有哪些程序是其它程序设计语言无法表示的,为什么还需要那么多种不同的语言? 如果我们将能够表示所有计算的语言都称为通用语言,那么是不是所有语言都是通用语言?如果是,是否存在更简单的通用语言? 精选 图灵机的结构 图灵机是一种用来定义可计算函数的抽象计算机 图灵机只有一个单一的数据结构,即一个称为“带子”的可变长线性数组 带子被分为很多格,每格上只包含一个字符 图灵机还有一个指针变量,称为“读出头”,它总是指向带子上的某个格。 精选 图灵机的操作 图灵机只提供几个简单的操作: 读出头所指定位置的字符可以被读出或被修改。程序可以根据读出的值进行转移。 读出头可以左右移动。如果读出头移动到带子的最末端,则自动在带子上加上一格,并赋予一个空字符作为初始值。 精选 图灵机的运行 图灵机开始运行时,带子上存放输入数据,读出头指向输入数据的最左端的字符; 图灵机根据预先编好的操作序列读写带子上的数据、或移动读出头; 如果最终能够停机,则带子上的内容就是最后的输出结果。 精选 图灵机的能力 任意可计算函数都可以用图灵机计算出来(Church论题) 图灵机等价于0型文法 确定型图灵机等价于非确定型图灵机。 精选 停机问题 是否存在某个通用的算法,它能够断定任意给定的图灵机在任意的输入下能否停机? 停机问题是不可判断的,即不存在这样的通用算法。 任意一个不可判断的问题,都等价于停机问题。 结论: 任何一种程序设计语言都可能代替其它语言 程序设计语言不存在质的区别,只有量的区别,如是否优美、易用、高效等 任何一种程序设计语言都有它存在的理由 返回 精选 4.2 语言的语义 程序设计语言基本上都是以上下文无关文法(特别是 LR(k) 文法)的核心设计的。 但语法分析已经不再是人们感兴趣的研究问题了。 现在的问题是如何确定程序的含义(即语义)。 精选 语言的语义 语言的手册必须定义语言中每个结构的含义,包括单独结构的含义以及和其他结构组合时的含义。 语言提供了不同结构,用户(为了写正确的程序,预测语句的执行效果)和实现者(正确地实现语言)需要这些结构的精确定义。 大多数语言中,形式文法用于定义语法,一段文字或例子用于定义语义,但定义是不精确的,有二义性,不同作者可能有不同理解。 语义定义问题还是理论研究的目标,但至今没有令人满意的解答。 已有各种形式方法用于语义定义。 精选 语义建模(1)—文法模型 对定义语言的BNF文法进行扩展,给出程序的语法分析树,从树中抽取出附加信息。属性文法便是抽取附加信息的一种方式。 精选 语义建模(2)—命令或操作

文档评论(0)

liuxiaoyu99 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档