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