编译原理语法(推导与语法树).ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 5 讲 西北农林科技大学本科教程 主讲教师:赵建邦 第三章 语法分析 3.1 文法和语言 3.2 推导与语法树 3.3 自顶向下的语法分析 3.4 自底向上的语法分析 3.5 规范规约的自底向上语法分析方法 第三章《语法分析》 3.2 推导与语法树 推导与短语 语法树与二义性 重点掌握 短语、句柄的概念 二义性的消除 本讲目标 3.2.1 推导与短语 1、规范推导 在3.1.1节中,所给句子i+i*i推导序列中的每一步推导都是对句型中的最右非终结符用相应产生式的右部进行替换,这样的推导称为最右推导(规范推导),规范推导的逆过程称为规范规约 如果每一步推导都是对句型中的最左非终结符用相应产生式的右部进行替换,则称为最左推导 3.2 推导与语法树 举例:文法G[E]:E?→?E?+?E | E?*?E | (E) | i (3.1) 句子i+i*i的最左推导和最右推导? 3.2.1 推导与短语 2、短语 设αβδ是文法G[S]的一个句型,如果有: 则称β是句型αβδ关于非终结符A的一个短语,或称β是αβδ的一个短语。特别是有A→β产生式时,β为句型αβδ的一个直接短语或简单短语 短语的两个条件缺一不可。仅有A → β未必意味着β就是句型αβδ的一个短语,还需要有 加以限制;即短语属于句型的组成部分。 3.2 推导与语法树 3.2.1 推导与短语 3、句柄 一个句型的最左直接短语称为该句型的句柄。注意,一个句型的直接短语可能不只一个,但最左直接短语则是惟一的。 3.2 推导与语法树 举例:文法G[E]:S?→?AB A → bB ?B → Sb | a 句型“baSb”的短语和句柄? [解答]: (1) 句型本身是该句型关于开始符号的短语 最左推导 3.2.1 推导与短语 3.2 推导与语法树 [解答]: (2) 句型baSb的子串Sb,是该句型相对于非终结符B的一个短语,而且是该句型的直接短语 (3) 句型baSb的子串a, 是该句型相对于非终结符B的一个短语,而且是该句型的直接短语、句柄 最左推导 3.2.1 推导与短语 3.2 推导与语法树 [解答]: (4) 句型baSb的子串ba, 是该句型相对于非终结符A的一个短语 注意:短语、直接短语、句柄都是针对某一句型来说的,都是指句型中的哪些符号串能够构成短语、直接短语、句柄。脱离句型,谈论三者是无意义的。 例5.2 文法G E →?T | E +T T →? F | T * F F →? i |(E) i1*i2+i3 是文法G的一个句型吗? 如果是,求出其句柄。 3.2.1 推导与短语 4、素短语 含有终结符的短语,如果它不存在也具有同样性质的真子串(不能包含有另一个素短语),则该短语为素短语 (1)是短语 (2)至少包含一个终结符 (3)不再包含其它素短语 例如,在 中,对于句型句型“E?+?E*i”: 短语:i、E*i和E+E*i 素短语:i 3.2 推导与语法树 E=E+E = E+E*E = E+E*i    3.2.1 推导与短语 4、素短语(练习) 3.2 推导与语法树 E + T E + T E T F * F T i 先找短语: T、T*F 、 T+T*F 、 i 、 T+T*F+i 再找素短语: T*F 、 i E + E E * E E i 先找短语: i 、E*i 、 E+E*i 再找素短语: i 3.2.2 语法树与二义性 对程序语言来说,有两个问题需要解决: (1)判别程序在语法上是否正确; (2)句子的识别或分析。 在编译方法中,为了便于识别或分析句子而引入了语法树这一重要的辅助工具 语法树以图示化的形式把句子分解成各个组成部分来描述或分析句子的语法结构,这种图示化的表示与所定义的文法规则完全一致,但更为直观和完整 3.2 推导与语法树 3.2.2 语法树与二义性 1、语法树(定义) 对文法G[S]?=?(VT, VN, S, ξ),满足下列条件的树称为G[S]的语法树: (1) 每个结点用G[S]?的一个终结符或非终结符标记; (2) 根结点用文法开始符S标记; (3) 内部结点(指非树叶结点)一定是非终结符,如果某内部结点A有n个分支,它的所有子结点从左至右依次标记为x1、x2、…、xn,则A?→?x1x2…xn一定是文法G[S]的一条产生式; (4) 如果某结点标记为ε,

文档评论(0)

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

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

1亿VIP精品文档

相关文档