乔姆斯基文法分级语言的语义-北京大学软件工程研究所.ppt

乔姆斯基文法分级语言的语义-北京大学软件工程研究所.ppt

  1. 1、本文档共56页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 程序语言的性质 语言的形式化模型 BNF为描述程序设计语言的属性提供了一种很好的手段,但并不是充分的手段。BNF回答了程序看起来象什么,但没有回答程序是做什么的。 形式化模型采用精确的数学模型来刻画研究对象,为研究、分析和操纵研究对象提供严谨的数学工具和手段。 本章将介绍下列形式化模型: 形式文法:乔姆斯基文法分级 语言的语义:属性文法、指称语义 程序的验证 4.1 语言的形式化性质 乔姆斯基分级文法 语言的能力 乔姆斯基分级文法 文法 由非终结符、终结符、开始(非终结)符、及产生式构成 文法的类别 3型文法:正则文法,定义词法的模型 2型文法:BNF文法,上下文无关文法 1型文法:上下文有关文法 0型文法: 3型文法:正则文法 为词法分析器提供模型。 这类文法的大多数性质都是可判定的 如,能产生什么样的串、给定串是否属于文法规定的语言、语言中的串是否有限等 正则文法可以产生形如an的串,其中a为有限字符序列 正则文法只能计数有限数 常用于关键字或单词扫描 2型文法—上下文无关文法 产生式的形式为:X ? ?, 其中?可以是终结符和非终结符的任意序列 同样,这类文法的大多数性质都是可判定的 如,能产生什么样的串、给定串是否属于文法规定的语言、语言是否为空等 可用来计数和比较两个项,产生形如ancbn的串 可以用堆栈来实现 可用来自动产生程序的语法分析树 2型和3型文法的相关问题都已基本上得到解决 1型文法—上下文有关文法 产生式的形式为:? ? ?, 其中?任意非终结符串, ?是终结符和非终结符的任意序列,但?中的符号个数应不多于?的符号个数 从开始符开始导出的串的长度是递增的 在生成串时,需要使用固定数量的存储空间,例如识别上下文无关文法无法识别的串ancnbn 上下文有关文法太复杂,很难用于程序设计语言 人们对上下文有关文法的很多特征还不太清楚 0型文法—非限定型文法 对产生式的形式? ? ?没有任何限制 可用来识别任意可计算的函数 其大多数性质都是不可判定的 不可判定性 不同类型的文法越来越复杂,产生的语言也越来越复杂,但是否说明计算机解决问题的能力可以越来越强,没有限制? 例如:能否编写一个C语言程序来判断另一个C语言程序能否结束? 但这基本上是不可能的,这不是编程人员的问题,而是因为计算机所基于的数学模型本身的局限性而导致的。 图灵机 一般来说,用一种语言编写的程序也可以用其他另一种语言来实现。 那么是否存在某个程序,只能用某种语言来实现,而用其他语言就无法实现? 如果没有,那么有哪些程序是其它程序设计语言无法表示的,为什么还需要那么多种不同的语言? 如果我们将能够表示所有计算的语言都称为通用语言,那么是不是所有语言都是通用语言?如果是,是否存在更简单的通用语言? 图灵机的结构 图灵机是一种用来定义可计算函数的抽象计算机 图灵机只有一个单一的数据结构,即一个称为“带子”的可变长线性数组 带子被分为很多格,每格上只包含一个字符 图灵机还有一个指针变量,称为“读出头”,它总是指向带子上的某个格。 图灵机的操作 图灵机只提供几个简单的操作: 读出头所指定位置的字符可以被读出或被修改。程序可以根据读出的值进行转移。 读出头可以左右移动。如果读出头移动到带子的最末端,则自动在带子上加上一格,并赋予一个空字符作为初始值。 图灵机的运行 图灵机开始运行时,带子上存放输入数据,读出头指向输入数据的最左端的字符; 图灵机根据预先编好的操作序列读写带子上的数据、或移动读出头; 如果最终能够停机,则带子上的内容就是最后的输出结果。 图灵机的能力 任意可计算函数都可以用图灵机计算出来(Church论题) 图灵机等价于0型文法 确定型图灵机等价于非确定型图灵机。 停机问题 是否存在某个通用的算法,它能够断定任意给定的图灵机在任意的输入下能否停机? 停机问题是不可判断的,即不存在这样的通用算法。 任意一个不可判断的问题,都等价于停机问题。 结论: 任何一种程序设计语言都可能代替其它语言 程序设计语言不存在质的区别,只有量的区别,如是否优美、易用、高效等 任何一种程序设计语言都有它存在的理由 4.2 语言的语义 程序设计语言基本上都是以上下文无关文法(特别是 LR(k) 文法)的核心设计的。 但语法分析已经不再是人们感兴趣的研究问题了。 现在的问题是如何确定程序的含义(即语义)。 语言的语义 语言的手册必须定义语言中每个结构的含义,包括单独结构的含义以及和其他结构组合时的含义。 语言提供了不同结构,用户(为了写正确的程序,预测语句的执行效果)和实现者(正确地实现语言)需要这些结构的精确定义。 大多数语言中,形式文法用于定义语法,一段文字或例子用于定义语义,但定义是不精确的,有二义性,不同作者可能有不同理解。 语义定义问题还是理论研究的目标

文档评论(0)

niupai11 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档