Bison противоречивый тип для yyerror

Я пытаюсь сделать калькулятор из flex и bison, но во время компиляции я обнаружил ошибку.

Вот ошибка:

C:\GnuWin32\src>gcc lex.yy.c y.tab.c -o tugas tugas.y:51: error: conflicting types for 'yyerror' y.tab.c:1433: error: previous implicit declaration of 'yyerror' was here 

Вот мой .l код:

 %{ #include  #include "y.tab.h" YYSTYPE yylval; %} plus [+] semi [;] minus [-] var [az] digit [0-1]+ equal [:=] %% {var} {yylval = *yytext - 'a'; return VAR;} {digit} {yylval = atoi(yytext); return DIGIT;} {plus} {return PLUS;} {minus} {return MINUS;} {equal} {return EQUAL;} {semi} {return SEMI;} . { return *yytext; } %% int main(void) { yyparse(); return 0; } int yywrap(void) { return 0; } int yyerror(void) { printf("Error\n"); exit(1); } 

И вот мой код .y:

 %{ int sym[26]; %} %token DIGIT VAR %token MINUS PLUS EQUAL %token SEMI %% program: dlist SEMI slist ; dlist: /* nothing */ | decl SEMI dlist ; decl: 'VAR' VAR {printf("deklarasi variable accepted");} ; slist: stmt | slist SEMI stmt ; stmt: VAR EQUAL expr {sym[$1] = $3;} | 'PRINT' VAR {printf("%d",sym[$2]);} ; expr: term {$$ = $1;} | expr PLUS term { $$ = $1 + $3;} | expr MINUS term { $$ = $1 - $3; } ; term: int {$$ = $1;} | VAR {$$ = sym[$1]; } ; int: DIGIT {$$ = $1;} | int DIGIT ; 

Почему я получаю эту ошибку? любое предложение для решения этой проблемы.
заранее спасибо

yyerror должен иметь эту подпись:

 int yyerror(char *); 

Поскольку ожидается, что в сообщении об ошибке будет принята строка, которая, вероятно, будет лучше с const char * , но вы можете получить дополнительные (неосведомленные) предупреждения с этим …

Вам нужно изменить

 int yyerror(void) 

в

 int yyerror(char*) 

Другими словами, yyerror() должен принять один аргумент c-строки, который описывает возникшую ошибку.