gpt4 book ai didi

parsing - 什么时候可以使用二义性语法或产生式规则? ( Bison 转移/减少警告)

转载 作者:行者123 更新时间:2023-12-02 18:07:01 27 4
gpt4 key购买 nike

当然有很多关于解决移位/归约错误的文档和方法。 Bison 文档建议正确的解决方案通常是%期待它们并处理它。

当你遇到这样的事情时:

S: S 'b' S | 't'

您可以像这样轻松解决它们:

S: S 'b' T | T
T: 't'

我的问题是:是让语法有点模糊并且预期发生转移/减少问题更好,还是尝试调整语法来避免它们更好?我怀疑有一个平衡,它是基于作者的需要,但我真的不知道。

最佳答案

当我读到它时,你的问题是“什么时候模棱两可的语法或产生式规则可以?”

首先考虑您所描述的语言。允许语言中存在不明确的产生式规则意味着什么?

您的示例描述了一种可能包含以下表达式的语言:t b t b t b t

在第二个示例中解析的表达式将是 (((( t ) b t) b t ) b t ) 但在不明确的语法中,它也可能变成 ( t b ( t b ( t b ( t)))) 甚至 ( t b t ) b ( t b t ) 。哪个有效可能取决于语言。如果 b 运算符模拟减法,那么它确实不应该有歧义,但如果是加法,则可能没问题。这实际上取决于语言。

要考虑的第二个问题是冲突解决后生成的语法源文件最终是什么样子。与其他源代码一样,语法是供人类阅读的,其次也是计算机阅读的。更喜欢一种能够更清楚地解释解析器试图从语法中做什么的符号。也就是说,如果解析器正在执行一些可能未定义的行为,例如,以 eager 语言对函数参数进行求值的顺序,则会使语法看起来不明确。

关于parsing - 什么时候可以使用二义性语法或产生式规则? ( Bison 转移/减少警告),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/599774/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com