gpt4 book ai didi

c++ - 字节冲突

转载 作者:行者123 更新时间:2023-11-28 03:50:37 25 4
gpt4 key购买 nike

我正在创建一个 byacc 程序来解析一些输入,但我无法解决移位/减少冲突,在这种情况下,我如何告诉 byac 始终移位?

    53: shift/reduce conflict (shift 49, reduce 36) on '('
53: shift/reduce conflict (shift 50, reduce 36) on '['
53: shift/reduce conflict (shift 51, reduce 36) on '{'
state 53
body : start_section . section end_section (32)
body : start_section . section (33)
body : start_section . (36)
body : start_section . end_section (38)

谢谢!

最佳答案

有两种类型的冲突:reduce/reduce 和 shift/reduce。当出现任何冲突时,那是因为您正在创建的语法不明确。你的 shift/reduce 出现是因为 Byacc 不知道它是否应该减少规则 'body' 并进入状态 36(就像“我找到了这条规则,给我输入下一条规则!”)或者,如果它应该转移(消费/接受)另一个 token 并继续寻找要接受的规则(比如“我还没有找到完整的规则,但给我更多的输入,也许我会的)。

Byacc 始终生成明确的句法解析器。如何?当冲突(疑问)出现时,它只会选择一个。哪一个?对于减少/减少,它选择第一个出现在文件中。默认情况下,对于移位/减少,它始终选择移位。所以...默认情况下它会产生您想要的行为。

不过,拥有明确的语法是个好主意。为此,您必须解决冲突。这意味着你必须找到一种方法来避免 Byacc 的优柔寡断。我希望其他人可以帮助你,我不是专家。我知道您可以通过减少规则数量和删除空规则来实现它,例如:

A:            /* empty */
| a
;

关于c++ - 字节冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5620735/

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