Просто:
#include <string.h>
в вашем разделе определения флекса поверх json.l
должно исправить это для вас.
В хранилище, на которое вы указали, также есть Makefile
. Может быть, вы должны использовать это. Вы, кажется, не генерируете файлы анализатора должным образом. См. Комментарий ниже.
Что касается остальных предупреждений:
warning: implicit declaration of function 'yyerror';
warning: implicit declaration of function 'yylex';
Это можно легко исправить, добавив объявления yylex()
и yyerror
должны присутствовать в прологе bison
раздел в верхней части вашего json.y
:
%{
int yylex();
void yyerror(const char *s);
%}
Что касается следующих:
json.l:34:11: warning: assignment to 'YYSTYPE' {aka 'int'} from 'char *' makes integer from pointer without a cast [-Wint-conversion]
yylval=strclone(yytext);
^
json.l:38:11: warning: assignment to 'YYSTYPE' {aka 'int'} from 'char *' makes integer from pointer without a cast [-Wint-conversion]
yylval=strclone(yytext);
^
Они немного более тонкие. Я бы посоветовал взглянуть здесь о том, как использовать yylval
для правильной передачи строк из токенов lex в действия парсера. Проблема в том, что yylval
- это пустое int
, но в итоге ему назначаются char
указатели для токенов NUMBER
и STRING
.