/ problem z użyciem flexa i bizona - bizon, flex-lexer

problem z używaniem flexu i żubra - żubra, flex-lexera

czy ktoś pracował na Flex i Bison?

mam ich przykład. uruchamiam to, ale pokazuje bez bizona,

na przykład: w pliku elast .l zdefiniowałem identyfikator i wstawiłem dla niego printf {"id"}.

a w bizonie zdefiniowałem coś takiego:

  id_list       :   ID          {printf("id-list::=idn");}
|   id_list   ","   ID      {printf("id-list::=<id-list>,idn");}

ale kiedy uruchamiam main.exe kiedy wprowadzam identyfikator, to po prostu pokazuje identyfikator (nie powinien wypisywać listy-identyfikatorów :: = identyfikator ????) Wiem, że nie wyjaśniłem dobrze, jeśli czegoś brakuje, proszę powiedz mi lub powiedz, żebym umieścił kody.

Odpowiedzi:

1 dla odpowiedzi № 1

Jest kilka rzeczy, które mogą być złe. Pierwszy, który jest zły, to printf. W Printf brakuje% s, więc wydrukuje tylko twój tekst. Oto jak to zrobię

id_list:
ID        { $$ = id_list( 0, $1); }
| id_list "," ID        { $$ = id_list($1, $2); }

w twoim pliku C.

IdList* id_list(IdList*p, ID*pp) {
//pp == yylval in this case a c-string from strdup
printf("id_list: %X %s", p, pp); //i rather set a breakpoint instead
if(p==0) p=new IdList;
p->deque.push_back(pp);
return p;
}

w pliku lex

//makes a copy bc yytext will be reused for other things
....        { yylval=strdup(yytext); return ID; }