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 无效

$1对我来说,它看起来像NULL,但我不明白为什么。这两个文件都非常大,因为语法非常庞大,但如果需要,我可以编辑以添加其他相关部分。

4

1 回答 1

1

好吧,我不知道错误的确切原因,但我设法通过更改%union野牛文件中的声明来修复它。

以前是:

%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 回答