目录中的“语法中的歧义”是什么意思?


如果给定一个输入字符串,存在多个最左推导或多个最右推导或多棵解析树,则称该语法是模棱两可的。

  • 如果语法不是模棱两可的,则称其为明确的语法。
  • 如果语法有歧义,那么这对编译器构建是有好处的。
  • 没有办法可以自动检测和消除歧义,但是我们可以通过重新编写整个明确语法来消除歧义。

示例

我们考虑一个具有如下所示的产生规则的语法 -

E = I

E = E+E

E = E*E

E = (E)

E = ε|0|1|2|3...9

让我们考虑一个字符串“3*2+5”

如果上述语法通过使用最左推导(LMD)生成两棵分析树,那么我们可以说给定的语法是有歧义的语法。

由于一个字符串有两个解析树,因此我们可以说给定的语法是有歧义的语法。

考虑另一个例子

检查语法是否有歧义。

A->AA

A->(A)

A->a

对于字符串“a(a)(a)a”,上述语法可以生成两棵解析树,如下所述 -

更新于:2021-06-12

超过 20,000 次浏览

开启你的 职业 生涯

完成课程,获得认证

开始
广告
© . All rights reserved.