проблема с использованием флекс и бизон - PullRequest
0 голосов
/ 07 июня 2011

кто-нибудь работал над 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 Ответ

1 голос
/ 07 июня 2011

Есть несколько вещей, которые могут быть неправильными.Первое, что неправильно, это 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; } 
...