flex ファイルに次のルールがあります。
{ID} {printf("(id, \"%s\") [%d]\n", yytext, yylineno); yylval.str = strdup(yytext); return IDENT;}
そして私のバイソンファイルの次のルール:
identificador : IDENT {cout << "identificador : IDENT\n"; cout << $1 << "\n";$$ = $1;}
印刷しようとすると$1
、次のエラーが表示されます。
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_S_construct null が無効です
私にとっては のように見えます$1
がNULL
、その理由はわかりません。文法が非常に大きいため、どちらのファイルも非常に大きくなりますが、必要に応じて他の関連部分を追加するために編集できます。