毫不含糊的语法歧义

时间:2015-01-18 12:22:56

标签: grammar context-free-grammar ambiguous-grammar

我不知道这是否是正确的网站。但我们正在研究语法的模糊性。包括最左派生和最正派派。我的练习题是:

E -> E * E | E + E | N
N -> 0N | 1N |
Output: 0110 + 110 * 01111

有没有办法让它变得模棱两可?任何使语法模糊不清的提示?

1 个答案:

答案 0 :(得分:1)

鉴于你的语法,它显然是模棱两可的。在此,它不会定义+*运算符之间的偏好。

正如你所说,如果你必须解析这个0110 + 110 * 01111,可以用两种方式完成: -

  1. 0110 + 110 * 01111 ----> (0110 + 110)* 01111

  2. 0110 + 110 * 01111 ----> 0110 +(110 * 01111)

  3. 所以,这个语法很模糊,因为它没有定义运算符优先级。此外,没有提供运营商关联性。

    它显然取决于语法指定的生产规则,通过指定冲突案例之间的区别来消除歧义。在进行自上而下的解析时,有些事情是左对齐和左递归导致模糊的语法。

    您应该看到elimination of left recursion和其他相关教程,因为它太宽泛而无法指定规则。