Byacc $$是无类型的,如何解决

时间:2014-04-12 21:45:46

标签: bison yacc untyped-variables

我正在使用byacc来构造一个语法,但是当我想使用 yyerrok 时它会告诉我 byacc:e - 第44行“bee.y”,$$是无类型的

    definition:
      | error ';'               {$$ = 0; yyerrok; } 
      | definition ID defFirst ';'      
      | definition ID '(' defSecond ')' stmt
      ;

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

Comments converted to an answer

@Grzes写道:

  

您收到此消息不是因为yyerrok的使用。原因是$$ = 0;,即您没有为非终端definition分配类型(正如@templatetypedef所说)。每次制作都可以关联一个动作。每个动作都可以返回一些语义值,可以在"更高的"中使用。生产。此外,您可以(或应该)为每个非终端和终端指定语义值的类型。看一下bison doc:www.gnu.org/software/bison/manual/bison.html,特别注意语义值语义动作