好的,让我解释一下我的需求:
我有一条描述块的规则,例如:想到类似C语言的#39; { .. }
一个块可能包含statements
,其中定义的规则(显然)如下:
statements : statement
| statements[previous] statement
;
现在抓住了这个问题:
如果我想要一个代码块,或者statements
规则如果它包含......什么都没有,或者 - 为了使它更加普遍 - 有一个完全有效的程序,该怎么办?什么都没有。
试图将......虚无添加到一条规则中,很明显也会导致100多次移位减少冲突。
我应该怎么做? 最明确的是,让解析器抛出语法错误,因为没有语句,没有多大意义,是吗?
答案 0 :(得分:1)
嗯,毕竟这很简单:
statements : statements[previous] statement
| /* empty */
;
并修复。没有转移 - 减少冲突,无论如何。