在野牛的空块规则?

时间:2014-04-25 08:11:27

标签: c bison yacc lex flex-lexer

好的,让我解释一下我的需求:

  • 我有一条描述块的规则,例如:想到类似C语言的#39; { .. }

  • 一个块可能包含statements,其中定义的规则(显然)如下:

    statements   :   statement
                 |   statements[previous] statement
                 ;
    

现在抓住了这个问题:

如果我想要一个代码块,或者statements规则如果它包含......什么都没有,或者 - 为了使它更加普遍 - 有一个完全有效的程序,该怎么办?什么都没有。

试图将......虚无添加到一条规则中,很明显也会导致100多次移位减少冲突。

我应该怎么做? 最明确的是,让解析器抛出语法错误,因为没有语句,没有多大意义,是吗?

1 个答案:

答案 0 :(得分:1)

嗯,毕竟这很简单:

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

并修复。没有转移 - 减少冲突,无论如何。