0

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 が無効です

私にとっては のように見えます$1NULL、その理由はわかりません。文法が非常に大きいため、どちらのファイルも非常に大きくなりますが、必要に応じて他の関連部分を追加するために編集できます。

4

1 に答える 1

1

エラーの正確な原因はわかりませんが%union、bison ファイルの宣言を変更することで修正できました。

以前は次のとおりでした。

%union {

     int integer;

     char character;

     char* str;

     entry* e;


 };

今は次のとおりです。

%union {

     struct {

         int integer;

         char character;

         char* str;

         entry* e;

     };

 };
于 2013-05-28T15:51:32.970 に答える