编译原理:文法及其二义性(判定及消除)

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净

学编译原理时,会学到文法,老师在介绍完文法的相关定义后又介绍了文法的二义性,但是没说到底是如何避免文法的二义性的。

这篇博文就是我的学习结果

文法的二义性:如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的。如果文法含有二义性的句子,则称该文法是二义性的。

我举个例子,来说明文法的二义性及其避免方法:

有下面这个文法:

S - >S and S | S or S | not S | p | q | (S)

那么要是得到 not p and q:

其推导过程如下:都用最左推导

A、S -> not S

         -> not S and S

         -> not p and S

         -> not p and q

B、S -> S and S

         -> not S and S

         -> not p and S

         -> not p and q

显然这两个推导过程不同,说明与两个过程相对应的语法树也不同,所以,此文法具有二义性

那么怎么修改呢?

这就到了消除二义性的方法了:

1、人为规定其中的“not”,“and”,“or”的优先级

依照此法,可将上述文法修改为:

S -> S or T | T

T -> T and F | F

F -> not F | (E) | p | q

2、第二种方法就是重写文法

文中的文法例子来源于:如何消除文法的二义性_dianaaaaa的博客-CSDN博客_消除二义性,这个博客是我在寻找方法的时候学习的,但是他写的没我的详细,哈哈!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liO_Oil

打赏我,开启隐藏模式。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值