有没有人参与过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 ????) 我知道我没有解释好,如果我错过了什么请说我或者说我要把代码。
答案 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; }