/ / problema con el uso de flex y bison - bison, flex-lexer

problema con el uso de flex y bison - bison, flex-lexer

¿Alguien trabajó en flex y bison?

Tengo un ejemplo de ellos. Lo ejecuto pero se muestra sin bisontes.

por ejemplo: en flex en el archivo .l definí id y puse printf {"id"} para ello.

y en bisonte definí algo como esto:

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

pero cuando ejecuto main.exe cuando ingresé a id, simplemente muestra id (¿no debería imprimir id-list :: = id ????) Sé que no expliqué bien, si me falta algo, por favor dígame o dígame que ponga los códigos.

Respuestas

1 para la respuesta № 1

Hay algunas cosas que podrían estar mal. Lo primero que está mal es el printf. A Printf le falta% s, por lo que solo imprimirá su texto. Heres cómo lo haría

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

en tu archivo 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;
}

en el archivo lex

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