0

我不知道这是否是问这个问题的正确网站。但我们正在研究语法的歧义。包括最左推导和最右推导。我的练习题是这样的:

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

有没有办法让它模棱两可?以及使语法模棱两可的任何提示?

4

1 回答 1

1

鉴于您的语法,这显然是模棱两可的。在这里,它没有定义+and*运算符之间的偏好。

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

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

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

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

它显然依赖于语法指定的产生式规则,通过指定冲突案例之间的区别来消除歧义。在进行自上而下的解析时,有些事情是左分解和左递归导致语法不明确。

您应该看到消除了左递归和其他相关教程,因为它太宽泛而无法指定规则。

于 2015-01-18T12:36:48.477 回答