我正在使用byacc来构造一个语法,但是当我想使用 yyerrok 时它会告诉我 byacc:e - 第44行“bee.y”,$$是无类型的
definition:
| error ';' {$$ = 0; yyerrok; }
| definition ID defFirst ';'
| definition ID '(' defSecond ')' stmt
;
我该如何解决这个问题?
答案 0 :(得分:2)
(Comments converted to an answer)
@Grzes写道:
您收到此消息不是因为yyerrok的使用。原因是
$$ = 0;
,即您没有为非终端definition
分配类型(正如@templatetypedef所说)。每次制作都可以关联一个动作。每个动作都可以返回一些语义值,可以在"更高的"中使用。生产。此外,您可以(或应该)为每个非终端和终端指定语义值的类型。看一下bison doc:www.gnu.org/software/bison/manual/bison.html,特别注意语义值和语义动作。