0

当我在 vc6 中使用 bison 和 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 
4

2 回答 2

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 的定义有关。

于 2009-08-06T13:03:24.010 回答
0

YY_PROTO是之前在同一个文件中定义的宏,所以在宏定义附近发生了一些奇怪的事情。在文件的前面搜索以查看如何YY_PROTO定义——如果它没有被定义,你的编译器正在做一些非常奇怪的事情。

于 2013-05-06T22:54:49.850 回答