2.5.2 文法的二义性

2.5.2 文法的二义性

设有文法 G [ E ]:

E → E + E | E * E | ( E ) | i

句子 i * i + i 有两个不同的最左推导,对应两棵不同的语法树,见图 2.6 和图 2.7 。

最左推导 1

 E ⇒ E + E ⇒ E * E + E 
    ⇒ i * E + E
     ⇒ i * i + E
    ⇒ i * i + i 
    

最左推导 2

E ⇒ E * E ⇒ i * E
 ⇒ i * E + E
 ⇒ i * i + E
 ⇒ i * i + i

图 2.6 最左推导 1 的语法树
在这里插入图片描述

图 2.7 最左推导 2 的语法树
在这里插入图片描述

图 2.6 的语法树先做乘法,而图 2.7 的语法树先做加法,到底先做何种运算呢?此处出现的这种现象称为文法的二义性。
如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义性的。或者说,若一个文法中存在某个句子,它有两个不同的最左(最右)推导,则这个文法是二义性的
上述文法 G [ E ]就是一个二义性的文法。

显然,二义性的文法将给编译程序的执行带来问题。对于二义性文法的句子,当编译程序对它的结构进行语法分析时,就会产生两种甚至更多种不同的理解。由于语法结构上的不确定性,将必然会导致语义处理上的不确定性。例如在上例中,当编译程序分析句子 i * i + i 时,是按图 2.6 去进行分析,还是按图 2.7 去进行分析?为使编译程序对每个语句的分析是唯一的,希望描述语言的文法是无二义性的。当然,对于二义性文法,我们可以利用文法的等价性来消除文法的二义性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值