如何获取已安装的 GNU Bison 版本

How to get the installed version of GNU Bison

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

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

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

但是,正如您将看到的,这是 运行 时间确定的,因此编译器抱怨函数调用他无法执行任何操作。

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

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

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