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

时间:2015-07-22 14:26:46

标签: bison bisonc++

我正在从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文档中找不到像这样的宏。

  • 有人知道“__BISON_VERSION”看起来像宏吗?
  • 任何有其他想法的人都可以根据野牛版进行正确的功能调用吗?

1 个答案:

答案 0 :(得分:0)

无论野牛版本如何,

public void printMessage(String message) { System.out.println(message); //Send the message that came from one fragment to another if (tabFragment1 instanceof ReceiverInterface){ ((ReceiverInterface) tabFragment1).receiveMessage(message); } } 在语法上都不正确。也许这不是你打算输入的内容。

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