Проблема с использованием флекс и бизон

Кто -нибудь работал над 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; } 
Другие вопросы по тегам