使用bison和flex与vc6

时间:2009-08-06 12:25:37

标签: c++ bison flex-lexer vc6

当我使用野牛&使用vc6进行flex,我得到了以下错误

lex.yy.c(395):错误C2146:语法错误:缺少';'在标识符'YY_PROTO'之前 lex.yy.c(395):致命错误C1004:找到意外的文件结尾

这会是什么原因? 请帮忙。

从评论中复制:

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus 
extern "C" int yywrap YY_PROTO(( void )); 
#else
extern int yywrap YY_PROTO(( void )); 
#endif
#endif 

2 个答案:

答案 0 :(得分:1)

YY_PROTO宏仅支持旧的预标准C而不支持原型。您将很难找到今天不支持的编译器。这意味着,作为第一个调试步骤,您可以尝试完全删除它,因为您要使用原型,即将lex.yy.c修改为以下内容:

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int yywrap ( void );
#else
extern int yywrap ( void );
#endif
#endif

我知道lex.yy.c是一个生成的文件,所以这不是永久修复,但至少应该确认问题与YY_PROTO的定义有关。

答案 1 :(得分:0)

YY_PROTO是之前在同一文件中定义的宏,因此在宏定义附近发生了奇怪的事情。在文件的前面搜索,看看如何定义YY_PROTO - 如果没有定义,你的编译器就会做一些非常奇怪的事情。