在 vc6 中使用 bison 和 flex
Posted
技术标签:
【中文标题】在 vc6 中使用 bison 和 flex【英文标题】:Use bison and flex with vc6 【发布时间】:2009-08-06 12:25:36 【问题描述】:当我 时,出现以下错误
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
【问题讨论】:
您可能希望在帖子中包含触发错误的行以及它之前和之后的几行。 这里是给出错误的行:#ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap YY_PROTO(( void )); #else extern int yywrap YY_PROTO(( void )); #endif #endif 您使用像 VC6 这样古老而过时的垃圾有什么特别的原因吗? 【参考方案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 的定义有关。
【讨论】:
【参考方案2】:YY_PROTO
是之前在同一文件中定义的宏,因此在宏定义附近发生了一些奇怪的事情。在文件的前面搜索以查看 YY_PROTO
是如何定义的——如果它没有被定义,你的编译器正在做一些非常奇怪的事情。
【讨论】:
以上是关于在 vc6 中使用 bison 和 flex的主要内容,如果未能解决你的问题,请参考以下文章