Parsing 如果语法模棱两可,那么每个句子形式就只有一个句柄。?

Parsing 如果语法模棱两可,那么每个句子形式就只有一个句柄。?,parsing,compiler-construction,grammar,lr,ambiguous-grammar,Parsing,Compiler Construction,Grammar,Lr,Ambiguous Grammar,我们可以从两个产品中进行缩减。在根据需要指定优先级和关联后,将只有一个句柄。那么,该语句是否正确???这是部分正确的,reduce/reduce冲突通常通过指定优先级或让解析器生成器选择在另一个规则之前应用哪个规则来解决 这意味着冲突已经解决,但解析器的行为不会完全符合预期。研究导致冲突的原因,并思考是否需要对语法进行重构以表达您试图解析的内容,或者自动选择/优先顺序是否足够,这样做很方便。如果您的语法规则不明确,您会得到多种解释。你不必坚持语法可以消除歧义;您可以简单地同意某些内容是不明确的,

我们可以从两个产品中进行缩减。在根据需要指定优先级和关联后,将只有一个句柄。那么,该语句是否正确???

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


这意味着冲突已经解决,但解析器的行为不会完全符合预期。研究导致冲突的原因,并思考是否需要对语法进行重构以表达您试图解析的内容,或者自动选择/优先顺序是否足够,这样做很方便。

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

fruit flies like an arrow.
解析的结果是多重解释

现在,要让这样一种语言对读者有用,要么他对歧义感到满意,要么你需要给他一种解决方法。(在本例中,我为您决定,您对这种模糊性感到高兴,因为我没有给您解决它的方法!)。或者,你可以向读者提供一些模棱两可的语法分析,一种选择哪种语法有意义的方法,他拒绝不恰当的语法分析

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


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

编译器生成器就是这样工作的。