编译原理——证明文法的二义性(1)

在证明文法的二义性之前,我们需要熟悉几个基本的概念。

推导和语法树

推导

这里的推导,简单的来说就是指根据给出的句型(句子),对文法进行推理变化最终得到句型(句子)的过程。
其中,最左(右)推导是在每次推导的过程中,将最左(右)部的非终结符替换成目标句型的一部分,直到完全替换成目标句型。

例:有文法G[S]:
S—>AB
A—>bB
B—>a|Sb
对于句型baSb,
最左推导为:S=>AB=>bBB=>baB=>baSb
最右推导为:S=>AB=>ASb=>bBSb=>baSb

语法树

对句型的推导过程给出一种图形表示,这种表示成为语法树,也成为推导树。
例:对于上述文法的句型的语法树之一为:

语法树

文法二义性

如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义性的。具体来说就是一个一个文法的某个句子能有两个不同的最右(左)推导。证明了这一点,就可以说该文法是具有二义性的。

例:设有文法G[S]:S—>iSeS| iS | i ,证明文法G[S]有二义性
证明:(首先我们得自己假设一个句子,构建该句子的语法树)
设句子为iiiei ,则:
最右推导一:S=>iS=>iiSeS=>iiSei=>iiiei
最右推导一

最右推导二:S=>iSeS=>iSei=>iiSei=>iiiei
最右推导二
因此,该文法存在一个句子有两个不同的最右推导,具有二义性。

参考资料:编译原理(第四版)

  • 35
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值