【发布时间】:2025-12-06 23:35:01
【问题描述】:
据我对 SLR 解析器本身的理解,它通过使用句柄和可行的前缀等解决了 shift reduce 冲突。那么 shift reduce 冲突为什么要困扰我呢?
【问题讨论】:
标签: compiler-construction yacc lex
据我对 SLR 解析器本身的理解,它通过使用句柄和可行的前缀等解决了 shift reduce 冲突。那么 shift reduce 冲突为什么要困扰我呢?
【问题讨论】:
标签: compiler-construction yacc lex
冲突意味着生成的解析器可能不接受语法描述的整个语言,而是接受该语言的子集。如果你不关心不解析一些根据语法合法的构造,那么你可以忽略 shift/reduce 和 reduce/reduce 冲突。
现在有时冲突是由于语法中的歧义,这意味着解析同一事物有多种方法,有时在这种情况下,可以忽略冲突,因为解析器仍然会解析整个语言。但并非总是如此(实际上它是例外而不是规则),因此通常您需要查看为什么语法有冲突以及对解析器有什么影响。
【讨论】:
你不必担心一个,如果是else/if冲突。您当然应该担心的其他任何事情,并且确实很难调试。幸运的是,您正在做简单的语法,并且有足够多的简单示例,您只需要比较和对比。
【讨论】: