您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 编译原理(3)语法_2(推导与语法树)
第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推导与语法树βA且αAδS*AS*3.2.1推导与短语–3、句柄•一个句型的最左直接短语称为该句型的句柄。注意,一个句型的直接短语可能不只一个,但最左直接短语则是惟一的。3.2推导与语法树举例:文法G[E]:S → ABA→bB B→Sb|a句型“baSb”的短语和句柄?[解答]:(1)baSbbaBbBBABSSS*βA且αAδS*baSbS句型本身是该句型关于开始符号的短语最左推导3.2.1推导与短语3.2推导与语法树[解答]:(2)baSbbaBbBBABSbaBS*βA且αAδS*SbB句型baSb的子串Sb,是该句型相对于非终结符B的一个短语,而且是该句型的直接短语(3)baSbbBSbASbABSbBSbS*aB句型baSb的子串a,是该句型相对于非终结符B的一个短语,而且是该句型的直接短语、句柄最左推导3.2.1推导与短语3.2推导与语法树[解答]:(4)βA且αAδS*baSbbBSbASbABSASbS*baA句型baSb的子串ba,是该句型相对于非终结符A的一个短语注意:短语、直接短语、句柄都是针对某一句型来说的,都是指句型中的哪些符号串能够构成短语、直接短语、句柄。脱离句型,谈论三者是无意义的。例5.2文法GE→ T|E+TT→ F|T*FF→ i|(E)i1*i2+i3是文法G的一个句型吗?如果是,求出其句柄。3.2.1推导与短语–4、素短语•含有终结符的短语,如果它不存在也具有同样性质的真子串(不能包含有另一个素短语),则该短语为素短语(1)是短语(2)至少包含一个终结符(3)不再包含其它素短语例如,在中,对于句型句型“E + E*i”:短语:i、E*i和E+E*i素短语:i3.2推导与语法树E+E+E*iE=E+E=E+E*E=E+E*i3.2.1推导与短语–4、素短语(练习)3.2推导与语法树E+TE+TETF*FTi先找短语:T、T*F、T+T*F、i、T+T*F+i再找素短语:T*F、iE+EE*EEi先找短语:i、E*i、E+E*i再找素短语:i3.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)如果某结点标记为ε,则它必为叶结点且是其父结点的惟一子结点。3.2推导与语法树图3-4句子i+i*i的语法树1、开始符S作为根结点3.2推导与语法树2、父亲节点是产生式左部,孩子节点对应产生式右部“E→ E+E”3、在一棵语法树生长过程中的任何时刻,所有那些没有后代的树叶结点自左至右排列起来就是一个句型。4、一棵已经完成的语法树无法判断是来自于最左推导还是最右推导,而使用文法规则的推导过程是有先后之分的。如果坚持使用最左(或最右)推导,那么一棵语法树就完全等价于一个最左(或最右)推导3.2.2语法树与二义性–2、子树与短语•语法树某个结点连同它的所有后代组成了一棵子树。只含有单层分枝的子树称为简单子树。•子树与短语的关系十分密切,根据子树的概念,句型的短语、直接短语、句柄和素短语的直观解释如下:(1)短语:子树的末端结点(即树叶)组成的符号串是相对于子树根的短语;(2)直接短语:简单子树的末端结点组成的符号串是相对于简单子树根的直接短语3.2推导与语法树SABbBaSb3.2.2语法树与二义性–2、子树与短语(3)句柄:最左简单子树的末端结点组成的符号串为句柄;(4)素短语:子树的末端结点组成的符号串含终结符,且在该子树中不再有包含终结符的更小子树–显然,从语法树出发寻找短语、直接短语、句柄和素短语要直观得多。注意:子树末端结点组成的符号串是指由该子树根开始向下生长的所有末端结点(即树叶),该子树的部分末端结点并不是该子树的短语。3.2推导与语法树SABbBaSb图3-5E+E*i的语法树3.2推导与语法树图3-6E+E+E*i的语法树直接短语、句柄、素短语不是短语直接短语3.2.2语法树与二义性–3、语法的二义性•对于文法任一句型的推导序列,总能为其构造一棵语法树,那么文法的某个句型是否只对应一棵唯一的语法树呢?也就是它是否只有唯一的一个最左(最右)推导呢?•对于文法(3.1),句子i+i*i存在两种最左(最右)推导,形成两棵不同的语法树:3.2推导与语法树最左推导1i*iiE*iiE*EiEiEEE最左推导2i*iiE*iiE*EiE*EEE*EE图3-7句子i+i*i的两棵不同的语法树3.2推导与语法树3.2.2语法树与二义性–3、语法的二义性•3.2.2语法树与二义性–3、语法的二义性•再如,条件语句的文法G[S]为G[S]:S → ifbSS → ifbSelseSS → a•定义:文法G[S]的一个句子如果能找到两种不同的最左推导(或最右推导),或者存在两棵不同的语法树,则称这个句子是二义性的。一个文法如果包含二义性的句子,则这个文法是二义文法,否则是无二义文法。3.2推导与语法树句子ifbifbaelsea的两棵不同语法树,请画出对应的两棵语法树3.2.2语法树与二义性–4、文法二义性的消除•对于一个二义性文法G[S],如果能找到一个非二义性文法G'[S],使得L(G') = L(G),则该二义性文法的二义性是可以消除的。如果找不到这样的G'[S],则二义性文法描述的语言为先天二义性的。•文法二义性消除方法:(1)不改变文法中原有的语法规则,仅增加一些语法的非形式规定;(2)构造一个等价的无二义性文法,把排除二义性的规则合并到原有文法中,改写原有的文法。(增加新的非终结符)3.2推导与语法树3.2.2语法树与二义性–4、文法二义性的消除例:将文法(3.1)改写为无二义性的文法G’[E] 如下:G’[E]: E → E+T|T T → T*F|F F → (E)|i此时,句子i+i*i就只有如图3-9所示的惟一一棵语法树:3.2推导与语法树例3.6试将如下的二义性文法G[S]的二义性消除:G[S]:S → ifbS|ifbSelseS|a[解答]消除G[S] 的二义性可采用如下两种方法:(1)不改变已有规则,仅加进一项非形式的语法规定:else与离它最近的if匹配(即最近匹配原则),这样,文法G[S] 的句子ifbifbaelsea只对应惟一的一棵语法树(见图3-10)。(2)改写文法G[S] 为G‘[S]:S → S1|S2S1 → ifbS1elseS1|aS2 → ifbS|ifbS1elseS2G’[S]对应的语法树见图3-113.2推导与语法树3.2推导与语法树图3-11G'[S]的复合if语句的语法树aa图3-10复合if语句的语法树3.2.2语法树与二义性–特别说明•应该指出的是文法的二义性和语言二义性是两个不同的概念通常只说文法的二义性,而不说语言的二义性,这是因为可能有两个不同的文法G和G’,其中一个是二义性的,另一个是无二义性的,但却有L(G)=L(G’),即这两个文法所产生的语言是相同的;讲一个语言称为二义性的,是指对它不存在无二义性的文法,这样的语言称为先天二义性的语言。3.2推导与语法树课后习题:3.23.33.2推导与语法树
本文标题:编译原理(3)语法_2(推导与语法树)
链接地址:https://www.777doc.com/doc-3374400 .html