使用flex和bison的问题

使用flex和bison的问题,bison,flex-lexer,Bison,Flex Lexer,有人研究过flex和bison吗 我有一个例子,我运行它,但它显示没有野牛 例如:在flex in.l文件中,我定义了id,并为它放置printf{“id”} 在《野牛》中,我定义了如下内容: id_list : ID {printf("id-list::=id\n");} | id_list ',' ID {printf("id-list::=<id-list>,id\n");} id_list:id{print

有人研究过flex和bison吗

我有一个例子,我运行它,但它显示没有野牛

例如:在flex in.l文件中,我定义了id,并为它放置printf{“id”}

在《野牛》中,我定义了如下内容:

  id_list       :   ID          {printf("id-list::=id\n");}
    |   id_list   ','   ID      {printf("id-list::=<id-list>,id\n");}
id_list:id{printf(“id list::=id\n”);}
|id_list','id{printf(“id list::=,id\n”);}
但当我输入id时运行main.exe时,它只显示id(它不应该打印id列表::=id??)
我知道我没有解释清楚,如果我遗漏了什么,请告诉我或让我输入代码。

有一些事情可能是错误的。第一个错误是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; } 

我将它从Adobe Flex重新标记到gnu Flex;因为我不相信这个问题与AdobeFlex开发有关。AdobeFlex不正确,谢谢