使用flex和bison的问题
有人研究过flex和bison吗 我有一个例子,我运行它,但它显示没有野牛 例如:在flex in.l文件中,我定义了id,并为它放置printf{“id”} 在《野牛》中,我定义了如下内容:使用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
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不正确,谢谢