/ / problème avec flex et bison - bison, flex-lexer

problème avec l'utilisation de flex et bison - bison, flex-lexer

Quelqu'un a-t-il travaillé sur le flex et le bison?

J'ai un exemple d'eux.Je le lance mais ça se voit sans bison,

Par exemple: dans le fichier .l flex, j'ai défini id et mis printf {"id"} pour cela.

et dans le bison, j'ai défini quelque chose comme ceci:

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

mais quand je lance main.exe quand je suis entré id, il montre juste id (ne devrait-il pas imprimer id-list :: = id ????) Je sais que je n'ai pas bien expliqué, si je manque quelque chose s'il vous plaît dites-moi ou dites-moi de mettre des codes.

Réponses:

1 pour la réponse № 1

Il y a quelques choses qui pourraient être fausses. Le premier qui est faux est le printf. Printf ne contient pas% s, il imprimera donc uniquement votre texte. Heres comment je le ferais

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

dans votre fichier 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;
}

dans le fichier lex

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