好,让我解释一下我需要什么:


我有一个描述块的规则,例如想起类似C的语言的{ .. }
一个块可能包含statements,其规则定义为(显然):

statements   :   statement
             |   statements[previous] statement
             ;





现在是要抓住的地方:

如果我希望代码块或statements规则也包含任何内容...也有效,该怎么办?或者-使其变得更加通用-具有完全不包含任何内容的完全有效的程序,该怎么办?

试图将...虚无添加到规则中,显然也导致了100多个shift-reduce冲突。

我该怎么办?最肯定的是,由于没有语句而使解析器抛出语法错误,这没有多大意义,对吗?

最佳答案

好吧,那毕竟很简单:

    statements   :   statements[previous] statement
                 |   /* empty */
                 ;


并固定。无论如何,都不会减少班次-减少冲突。

关于c - 野牛中的空块规则?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23287651/

10-12 02:58