编译原理 文法和语言讲解.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1 1 一.如何来描述一种语言 如果语言是有穷的(只含有有穷多个句子),可以将句子逐一列出来表示 如果语言是无穷的,找出语言的有穷表示。语言的有穷表示有两个途经: 生成方式 (文法):语言中的每个句子可以用严格定义的规则来构造。 识别方式(自动机):用一个过程,当输入的一任意串属于语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是”,(要么永远继续下去) 算术表达式文法表示 例3.6 文法G=({E}, {+,*,i,(,)}, P, E} P:E → i E → E+E E → E*E E → (E) 赋值语句文法表示 赋值语句→i = E 条件语句文法表示 条件语句→if条件then语句 | if条件then语句else 语句 语法树是这样的一个语法结构,它的结点由符号组成。根结点对应于识别符号。只有非终结符号对应的结点有子结点。并且,一个结点和它的子结点分别对应于文法中的一个规则的左部和右部。 作为识别句子的辅助工具,语法树可以表示句子的结构。这一点对于其后的语义分析有非常重要的意义。 结点:每棵树的结点对应于一个符号。结点的名字就是该符号。 边:两个结点之间的连线。 根结点:没有边进入的结点。 分支:某个结点向下射出的边和其结点称为分支。(父子结点,兄弟结点) 子树:语法树的某个结点和它向下射出的部分 末端结点:没有向下射出的边的结点成为末端结点。在相对于句型的语法树中,末端结点可能是非终结符号。 给定文法G,G=(VN,VT,P,S),对于G的任何句型都能构造与之关联的语法树(推导树)。这棵树具有下列特征: 1、根结点的标记是开始符号S; 2、每个结点的标记都是V中的一个符号; 3、若一棵子树的根结点为A,且其所有直接子孙的标记 从左向右的排列次序为A1A2…AR ,那么 A→A1A2…AR一定是P中的一条规则; 4、若一标记为A的结点至少有一个除它以外的子孙,则A∈VN 5、若树的所有叶结点上的标记从左到右排列为字符串w,则w是文法G的句型;若w中仅含终结符号,则w为文法G所产生的句子。 从推导构造语法树 方法:把识别符号做为根结点,对每一个直接推导画一个分支,分支的名字是直接推导中被替换的非终结符号,直到再无分支可画结束。 从语法树构造推导 方法:从分支建立直接推导,然后从语法树中剪去这个分支,直到无分支可剪。 语法树表明了在推导过程中使用了哪条规则和使用在哪个非终结符号上,但它并没有表明使用规则的顺序。 一棵语法树可能对应不止一种推导。 从语法树构造推导的过程 S ?AB?abB?abcBd ?abccdd 【例】 给出了下列文法G (1)无正负号整数?数字序列 (2)数字序列?数字序列数字| 数字 (3)数字 ? 0|1|2|3|4|5|6|7|8|9 VT ={0,1,2,3,4,5,6,7,8,9} VN={无正负号整数 , 数字序列,数字} 判断数据2634是否是C语言合法的数据。 【解】 (1)用最右推导,每次用产生式的规则替换最右边的非终结符,推导过程如下: 无正负号整数 ? 数字序列 ?数字序列数字?数字序列4 ?数字序列数字4?数字序列34 ?数字序列数字34 ?数字序列634?2634 (2)用最左推导,每次直接推导都替换最左边的非终结符,推导过程如下: 无正负号整数 ? 数字序列 ?数字序列数字 ?数字序列数字数字 ?数字序列数字数字数字 ?数字数字数字数字 ?2数字数字数字 ?26数字数字 ?263数字 ?2634 我没说她偷了我的钱。(可是有人这么说) 我没说她偷了我的钱。(我确实没这么说) 我没说她偷了我的钱。(可是我是这么暗示的) 我没说她偷了我的钱。(可是有人偷了) 我没说她偷了我的钱。(但她用这钱做了某事) 我没说她偷了我的钱。(她偷了别人的钱) 我没说她偷了我的钱。(她偷了别的东西) (1)文法二义性 若一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。(或者,若一个文法存在某个句子有两个不同的最左(右)推导)。 (2)语言先天二义 产生某上下文无关语言的每一个文法都是二义的。 要判定一个文法是否是二义性文法,或它是否产生一个先天二义性的上下文无关语言

文档评论(0)

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

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

1亿VIP精品文档

相关文档