好的,让我解释一下我需要什么:
我有一个描述 block 的规则,例如想想类 C 语言的
{ .. }
block 可以包含
语句
,其规则定义(相当明显)如下:statements : statement | statements[previous] statement ;
现在要注意的是:
如果我想要一段代码或一个 statements
规则在它不包含任何内容的情况下也有效,或者 - 为了使其更加通用 - 拥有一个完美的,该怎么办?不包含任何内容的有效程序。
尝试在规则中添加...虚无,这也很明显,会导致大约 100 多个移位归约冲突。
我该怎么办? 最肯定的是,让解析器因为没有语句而抛出语法错误,没有多大意义,不是吗?
最佳答案
嗯,这毕竟很简单:
statements : statements[previous] statement
| /* empty */
;
并已修复。无论如何,没有移位归约冲突。
关于c - Bison 中的空 block 规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23287651/