0

我正在从 Bison 1.875 升级到 Bison 3.0.4 并希望向后兼容。

  • 函数调用yyparse(void *)在 1.875 中有效,但在 3.0.4 中无效
  • 函数调用yyparse()在 3.04 中有效,但在 1.875 中无效

Bison 输出一个 cpp 文件,其中包含#define YYBISON_VERSION "3.0.2" 我用来strcmp确定实际版本是否是最新版本并决定使用哪个函数调用的行:

int ret = 0;
if(bisonVersionCheck < 0)
{
    ret = yyparse(void *);
}
else
{
    ret = yyparse();
}

但是,正如您将看到的,这是确定的运行时,因此编译器会抱怨他无能为力的函数调用。

我想要一个可以使用的宏,所以我可以使用预处理器指令来选择正确的函数调用。我在野牛文档中找不到这样的宏。

  • 有人知道“__BISON_VERSION”看起来像宏吗?
  • 有其他想法的人根据野牛版本进行正确的函数调用吗?
4

1 回答 1

0

ret = yyparse(void *)无论野牛版本如何,在语法上都不是正确的 C。也许这不是您要键入的内容。

我不清楚为什么yyparse()在您的 1.875 代码中不起作用。也许您在YYPARSE_PARAM某处定义宏,以便void*yyparse. 在旧版本的野牛中,这将改变调用约定,yyparse但我认为现代版本会忽略它。如果需要,请参阅℅parse-param替换声明(尽管问题似乎暗示yyparse未使用 to 的参数)。

于 2015-07-23T13:20:43.607 回答