/ / проблема з використанням флексу та зубрів - зубр, флекс-лексер

проблема з використанням flex і зубрів - зубрів, flex-lexer

хтось працював на флексі та зубрах ??

у мене є приклад з них. Я запускаю його, але це показує без зубрів,

наприклад: у flex у .l-файлі я визначив ідентифікатор і поставлю для нього printf {"id"}.

і в зубрі я визначив щось подібне:

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

але коли я запускаю main.exe, коли я вводив ідентифікатор, він просто показує id (не повинен він друкувати id-list :: = id ????) я знаю, що я не пояснював добре, якщо мені щось не вистачає, будь ласка, скажіть мені або скажіть мені, щоб поставити коди.

Відповіді:

1 для відповіді № 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; }