我在YACC编程,当我得到一个语法时,我得到了一个减少冲突。我不得不为此担心吗?

时间:2012-10-17 15:53:14

标签: compiler-construction yacc lex

至于我对SLR解析器本身的理解通过使用句柄和可行的前缀等来解决移位减少冲突。那么为什么移位会减少冲突会让我烦恼呢?

2 个答案:

答案 0 :(得分:2)

冲突意味着生成的解析器可能不接受语法描述的整个语言,而是接受该语言的子集。如果你不关心不解析一些根据语法合法的结构,那么你可以忽略shift / reduce和reduce / reduce冲突。

现在有时候冲突是由于语法中的含糊不清,这意味着有多种方法可以解析同一个东西,有时在这种情况下,冲突可以被忽略,因为解析器仍然会解析整个语言。但并不总是(事实上它是例外而不是规则),所以一般来说你需要查看为什么语法有冲突以及它对解析器有什么影响。

答案 1 :(得分:0)

如果是其他/如果冲突,您不必担心一个。你应该担心的任何其他事情,确实调试会变得非常棘手。幸运的是,你正在做简单的语法,有足够的工作简单的例子,你只需要比较和对比。