编译原理第五章总结

第五章 语法分析——自下而上分析

5.1自下而上分析基本问题

一、移进-归约法

这种方法的大致意思是:用一个寄存符号的先进先出后进栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选

式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。

例如:设文法G(S):

      (1) S —> aAcBe

      (2) A —> b

      (3) A —> Ab

      (4) B —> d

分析:首先让a进栈,然后把b进栈,根据第二条规则,把b归约成A,再让第二个b进栈,此时栈顶有Ab,根据第三条规则,将

Ab归约成A,让c进栈,d进栈,根据第四条规则,将d归约成B,最后让e进栈,此时栈里的符号为aAcBe,最后根据第一条规则

将其归约为S。

二、规范归约

定义:令G是一个文法,S是文法的开始符号,假定αβ△是文法G的一个句型

其中α,β,△∈(VN∪VT)*,A∈VN ,如果有


则称β是句型αβ△相对于非终结符A的短语

     特别是,如果有A=>β则称β是句型αβ△相对于规则A—>β的直接短语,一个句型的最左直接短语称为该句型的句柄

:因为句型是由开始符号推出来的,而短语是由非终结符号推出来的。所以,短语是句型的一部份或全部符号串。


考虑文法

G   : E —> T | E+T

                  T—> F | T*F

                  F—>  (E) | i

求证i1*i2+i3是G的一个句型,并找出该句型的全部短语、直接短语和句柄。

分析:证明i1*i2+i3是G的一个句型

E => E+T=> T+T => T*F+T => F*F+T

             => i1*F+T => i1*i2+T=> i1*i2+F

  => i1*i2+i3

找i1*i2+i3的所有短语

(1)假设i1*i2+i3是一个短语

因为 E  =>*E 且 E =>+i1*i2+i3

所以i1*i2+i3是句型i1*i2+i3关于E的一个短语

(2)假设i1*i2是一个短语

因为 E =>*T+i3  且 T  =>+i1*i2

所以i1*i2是句型i1*i2+i3关于T的一个短语

(3)假设i1是一个短语

因为 E =>*F*i2+i3   且 F =>+ i1

所以i1是句型i1*i2+i3关于F的一个短语

(4)假设i2是一个短语

因为 E=>*i1*F+i3 且 F=>+i2

所以i2是句型i1*i2+i3关于F的一个短语

(5)假设i3是一个短语

因为 E=>*i1*i2+F且 F=>+i3

所以i3是句型i1*i2+i3关于F的一个短语

(6)假设i2+i3是一个短语

因为 E=>*i1*E不成立

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值