bison c ++: ошибка, ожидаемая инициализатором перед маркером '*' - PullRequest
0 голосов
/ 21 апреля 2011

Я использую flex и bison на C ++, но теперь я боролся.

Ошибка, которую выдает g ++:

src/bison.tab.h:125: error: expected initializer before ‘*’ token

bison.tab.h - автоматически сгенерированный файл из парсера bison yacc, строка с сообщением об ошибке:

bison.tab.h:125: extern YYSTYPE yylval; 

Мой бизон.й

void yyerror(const char* error);    
#include "objects/tabla.h"    
#include "Node.h"    
#define YYSTYPE Node*    
#include "bison.tab.h"    
#include "lex.yy.c"
using namespace std;       
void yyerror(const char* error) {cout<<"*** "<<error<<endl; };        
Node* root;    
%}    
%nonassoc vacio
%tokens 
%start start    
%%
Grammar....
%%
main()
{   
    yyparse();
}

Я не знаю, в этом ли проблема, которую я не вижу ...

Приветствия

1 Ответ

1 голос
/ 12 мая 2011

#define YYSTYPE Node*

Я думаю, что эта строка приводит к проблеме, и если вам лучше использовать %union для настройки типа узла, например

{% ... %}

%union {
    Node* node_type;
}

%type <node_type> ast_root
%type <node_type> something0
%type <node_type> something1

%%

ast_root: ....
...