第3章 程序设计语言的语法描述培训资料

上传人:yuzo****123 文档编号:141166559 上传时间:2020-08-04 格式:PPT 页数:37 大小:157KB
返回 下载 相关 举报
第3章 程序设计语言的语法描述培训资料_第1页
第1页 / 共37页
第3章 程序设计语言的语法描述培训资料_第2页
第2页 / 共37页
第3章 程序设计语言的语法描述培训资料_第3页
第3页 / 共37页
第3章 程序设计语言的语法描述培训资料_第4页
第4页 / 共37页
第3章 程序设计语言的语法描述培训资料_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《第3章 程序设计语言的语法描述培训资料》由会员分享,可在线阅读,更多相关《第3章 程序设计语言的语法描述培训资料(37页珍藏版)》请在金锄头文库上搜索。

1、第3章 程序设计语言的语法描述,3.1 文法的引入,文法:对语言结构的定义和描述。 先讨论自然语言的文法。例: the big elephent ate a banana,3.1 文法的引入,语法树 根据英语的语法,上述句子的语法结构可用图(语法树)表示如下:,3.1 文法的引入,非叶结点称为语法单位,在形式语言中称为非终结符。 处于根结点位置的结点又称为开始符号。 叶结点称为单词符号,在形式语言中称为终结符。,3.1 文法的引入,规则 可以通过建立一组规则,来描述上述句子的语法结构,规则在形式语言中称为产生式。上述英文句子可用下述规则来描述:,3.1 文法的引入,1. 2. 3. the|

2、a 4. big 5. elephant| banana 6. 7. 8. ate,3.1 文法的引入,由规则推导句子 可用规则来推导出句子。从开始符号出发,若能从规则推导出某符号串,则该符号串就是该文法的合法的句子,反之语法错误。,3.1 文法的引入, the the big the big elephant the big elephant the big elephant ate the big elephant ate the big elephant ate a the big elephant ate a banana,3.1 文法的引入,上述推导可简单表示为: the big e

3、lephant ate a banana。,3.1 文法的引入,值得注意的是用上述规则可推导出多个句子,因存在推导 the big banana ate an elephant 故the big banana ate an elephant也是文法的一个合法的句子。但意义是荒谬的,也就是说句子的语义是错误的。 一个语法正确的句子不能保证其语义是正确的,故一个句子是否正确,需要进行语法和语义两方面检查。,3.1 文法的引入,递归规则和递归文法 递归定义 定义某事物,又用到某事物。 在规则的左部和右部有相同的非终结符 U xUy U为非终结符,xy为终结符。,3.1 文法的引入,递归规则和递归文法

4、 递归规则(直接递归) 在产生式的左部和右部都含有非终结符U,故U xUy是递归规则。 若x= , U Uy称为左递归规则, 若y= ,U xU称为右递归规则。,3.1 文法的引入,递归规则和递归文法 间接递归 文法的递归性还可以在推导过程中由规则间接产生: V Uy|z, U Xv 上述规则不是递归规则,但存在推导VUy xUy,即V xUy,称文法含有间接递归。,3.1 文法的引入,递归规则和递归文法 递归文法 含有递归规则或间接递归的文法称为递归文法,3.1 文法的引入,利用递归文法我们可以用有穷的规则来描述无穷的语言,这不但解决了语言的定义问题,而且使得对语言的语法检查成为可能。,3.

5、1 文法的引入,例:定义无符号整数。 不采用递归规则,描述无符号整数全体就要使用无穷多条的规则。 | 0|1|2|3|4|5|6|7|8|9|0 采用递归规则,描述无符号整数全体仅需12条规则。 |NND|D 0|1|2|3|4|5|6|7|8|9|0D0|1|2|3|4|5|6|7|8|9|0,3.1 文法的引入,例1:无符号整数1 N D 1 例2:无符号整数23 N ND DD 2D 23 例3:无符号整数456 N ND NDD DDD 4DD 45D 456,3.2上下文无关文法,文法是描述语言结构的形式规则(语法规则),这些规则必须是准确的,易于理解的,应当有较强的描述能力,足以描

6、述各种不同的结构,3.2上下文无关文法,形式语言的奠基人乔姆斯基将文法分为4种类型,它们是: l 短语文法(0型文法) l 上下文有关文法(1型文法) l 上下文无关文法(2型文法) l 正规文法(3型文法) 这四种文法在形式语言中都有严格的定义。但对于程序设计语言来说,上下文无关文法已经够用了,上下文无关文法有足够的能力描述大多数现今使用的程序设计语言的语法结构。以后,“文法”一词若无特别说明,则指“上下文无关文法”。,3.2上下文无关文法,上下文无关文法所定义的语法单位和该语法单位可能出现的环境无关。 自然语言中,一个句子或一个字,其意义和它们所处的上下文有密切关系,因此上下文无关文法不适

7、合描述自然语言。,3.2上下文无关文法,文法和语言 一个文法G是一个四元式(VT,VN,S,VP),其中 l VT是一个终结符的非空有限集,终结符通常用小写字母表示。 l VN是一个非终结符的非空有限集,非终结符通常用大写字母表示。 l S是一个特殊的非终结符(SVN),称为开始符号。 l VP是一个产生式(规则)的有限集合,每个产生式的形式是A ,其中AVN,(VTVN)*。,3.2上下文无关文法,终结符是语言的基本符号,就是源程序中的单词,是语言不可分割的最小单位。 单词经过词法分析后,语法分析只使用单词二元式的种别code。 语法分析关心的是:单词是标识符还是常数,不考虑是哪个标识符,常

8、数是多少。,3.2上下文无关文法,因此,终结符用单词的种别表示。 i 表示标识符 x 表示整形或实形变量 y 表示无符号实常数 单字符单词种别与单词本身相同+ 基本字借用原单词形式,3.2上下文无关文法,非终结符用来表示抽象的语法单位,算术表达式,赋值语句,说明语句,程序。 通常用大写字母表示,也用表示 开始符号是特殊的非终结符,定义文法的出发点,3.2上下文无关文法,产生式是定义语法单位的一种书写规则。 上下文无关文法产生式的左部必定是一个非终结符,该非终结符称为产生式的左部符号,简称左部符号。 产生式的右部是终结符和非终结符经过有限次连接构成的文法符号串,可以是空字。,3.2上下文无关文法

9、,为方便,若干个左部符号相同的产生式,如 A 1 A 2 A 3 A 4 A N 合并:A 1 | 2| | N,3.2上下文无关文法,例: G=(VT,VN,S,VP) VT=+,*,(,),i VN=E S=E VP=EE+E,EE*E,E(E),Ei 可简记为: G:EE+E|E*E| (E)|i 根据上述文法,可推导出任何仅包含加乘的算术表达式。,3.2上下文无关文法,基本术语 直接推出和直接归约 推导和归约 句型 句子 语言 等价文法 最左推导和最右推导,3.2上下文无关文法,文法的二义性 语法树 我们可以用一个有向图表示一个句型的推导,这种表示称为语法树。 在一般情况下,某一句型不

10、论其推导过程如何,其最终形成的语法树是相同的,故语法树是不同推导过程的共性抽象。若仅进行最左(右)推导,则语法树和最左(右)推导等价。,3.2上下文无关文法,二义文法 某些文法的句型的推导可能对应一棵以上的语法树,或存在一个以上的最左(右)推导。,3.2上下文无关文法,例:已知文法G:EE+E|E*E|(E)|i和句子i+i*i,该句子存在二个最左(右)推导,即二棵语法树。,3.2上下文无关文法,语法树1(先形成+后形成*),3.2上下文无关文法,语法树2(先形成*后形成+),3.2上下文无关文法,句子i+i*i的二个最左推导序列: EE+Ei+Ei+E*Ei+i*Ei+i*i EE*EE+E*Ei+E*Ei+i*Ei+i*i 句子i+i*i的二个最右推导序列: EE+EE+E*EE+E*iE+i*ii+i*i EE*EE*iE+E*iE+i*ii+i*i,3.2上下文无关文法,二义文法:若一个文法所产生的语言中,只要存在一个句子,它有二个最左推导,或有二个最右推导,或句子的推导对应两棵语法树,则称该文法为二义文法。,3.2上下文无关文法,二义文法的利用和处理 l 根据条件修改文法,语言不变。 根据条件修改编译程序的某一部分,文法保持不变,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号