1

可以有两个产生式,我们可以从中进行归约。在根据需要给予优先级和关联后,将只有一个句柄。所以这句话是真的吗?

4

2 回答 2

1

这部分正确,reduce/reduce 冲突通常通过指定优先级或让解析器构建器选择在另一个之前应用哪个规则来解决。

这意味着冲突已解决,但解析器不会完全按照预期运行。研究导致冲突的原因并考虑是否需要重构语法来表达您要解析的内容或者自动选择/优先级是否足够,这很方便。

于 2010-11-13T21:40:24.767 回答
1

如果你有一个规则不明确的语法,你会得到多种解释。您不必坚持语法消除歧义;您可以简单地同意某些内容是模棱两可的,并以多种方式对其进行解析:

fruit flies like an arrow.

解析的结果是多种解释。

现在,要让这种语言对读者有用,要么他必须对歧义感到满意,要么你需要给他一个解决它的方法。(在这个例子中,我已经为你决定你很高兴这个模棱两可,因为我没有给你解决它的方法!)。或者,可以为某些东西的读者提供模棱两可的解析,一种选择哪种解析有意义的方法,并且他拒绝不适当的解析。

对于上述情况,我可以告诉你我的意思是“水果 => 西瓜”。

计算机语法没有什么不同,但大多数程序员不想要模棱两可的代码。所以总的来说,语言设计者喜欢定义明确的语法。在实践中,他们没有成功,你会得到一些有趣的语言规则,比如“如果这可以被模棱两可地解释,那么就这样解释吧。”。

于 2010-11-13T21:42:24.503 回答