我不知道这是否是正确的网站。但我们正在研究语法的模糊性。包括最左派生和最正派派。我的练习题是:
E -> E * E | E + E | N
N -> 0N | 1N |
Output: 0110 + 110 * 01111
有没有办法让它变得模棱两可?任何使语法模糊不清的提示?
答案 0 :(得分:1)
鉴于你的语法,它显然是模棱两可的。在此,它不会定义+
和*
运算符之间的偏好。
正如你所说,如果你必须解析这个0110 + 110 * 01111
,可以用两种方式完成: -
0110 + 110 * 01111 ----> (0110 + 110)* 01111
0110 + 110 * 01111 ----> 0110 +(110 * 01111)
所以,这个语法很模糊,因为它没有定义运算符优先级。此外,没有提供运营商关联性。
它显然取决于语法指定的生产规则,通过指定冲突案例之间的区别来消除歧义。在进行自上而下的解析时,有些事情是左对齐和左递归导致模糊的语法。
您应该看到elimination of left recursion和其他相关教程,因为它太宽泛而无法指定规则。