当我使用bison生成解析器时,我会收到此警告:
warning: stray `@'
但那是因为我有一些包含@
的合法Objective-C代码,例如这是带有警告的规则之一:
file : axiom production_rule_list { NSLog(@"file"); }
;
在代码中使用@
是否有任何风险?如果没有,如何告诉野牛这是合法使用@
?
提前致谢。
答案 0 :(得分:2)
该消息只是一个警告。你可以忽略它。如果您正在使用Xcode,它甚至不会在其问题导航器中显示警告。
将您的Bison输入文件重命名为.ym
扩展名,而不是.y
扩展名。这告诉Xcode这是一个带有Objective-C动作的语法。
答案 1 :(得分:2)
如果要取消警告,可以使用#define AT @
。
除了用代码替换$ ...序列以提供相关令牌之外,大括号中的代码才被复制。这似乎与Objective-C一起使用,但是如果你使用ARC,你可能需要进行一些挖掘(或者只是添加额外的块(在C意义上))以确保尽快释放对象。
答案 2 :(得分:0)
根据Actions - Bison 2.7中的文档,大括号之间的代码似乎是C代码。因此我怀疑你可以在那里使用objective-c构造。
但是你可以创建一个外部C函数来为你做的工作:
Logit(char* message)
{
NSLog(@"%s",message);
}
在野牛行动中使用它
file : axiom production_rule_list { Logit("file"); }
;