Проблема с использованием флекс и бизон
Кто -нибудь работал над flex и bison??
у меня есть пример их. я запускаю его, но это показывает без бизонов,
например: во flex в.l файле я определил id и поставил printf{"id"} для него.
и в бизоне я определил что-то вроде этого:
id_list : ID {printf("id-list::=id\n");}
| id_list ',' ID {printf("id-list::=<id-list>,id\n");}
но когда я запускаю main.exe, когда я ввел id, он просто показывает id(не печатать ли id-list::=id????), я знаю, что не очень хорошо объяснил, если я что-то упустил, пожалуйста, скажите мне или скажите мне поставить коды.
1 ответ
Решение
Есть несколько вещей, которые могут быть неправильными. Первое, что неправильно, это printf. В Printf отсутствует%s, поэтому он будет печатать только ваш текст. Вот как бы я это сделал
id_list:
ID { $$ = id_list( 0, $1); }
| id_list ',' ID { $$ = id_list($1, $2); }
в вашем файле 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;
}
в файле lex
//makes a copy bc yytext will be reused for other things
.... { yylval=strdup(yytext); return ID; }