上下文无关文法中的歧义

如果上下文无关文法 G 对于某个字符串 w ∈ L(G) 有多个派生树,则称为 歧义文法。对于从该文法生成的某个字符串,存在多个最右或最左派生。

问题

检查具有生成规则 −

的文法 G 是否歧义。

X → X+X | X*X |X| a

是否歧义。

解决方案

让我们找出字符串"a+a*a"的派生树。它有两个最左边的派生。

派生 1X → X+X → a +X → a+ X*X → a+a*X → a+a*a

解析树 1

解析树 1

派生 2X → X*X → X+X*X → a+ X*X → a+a*X → a+a*a

解析树 2

解析树 2

由于单个字符串"a+a*a"有两棵解析树,因此语法 G 具有歧义。