使用flex和bison的问题

时间:2011-06-07 08:30:15

标签: bison flex-lexer

有没有人参与过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");}

但是当我在输入id时运行main.exe它只显示id(不应该打印id-list :: = id ????) 我知道我没有解释好,如果我错过了什么请说我或者说我要把代码。

1 个答案:

答案 0 :(得分: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; }