Objective-C和Bison警告:流浪'@'

时间:2012-12-29 18:21:10

标签: objective-c bison yacc

当我使用bison生成解析器时,我会收到此警告:

warning: stray `@'

但那是因为我有一些包含@的合法Objective-C代码,例如这是带有警告的规则之一:

file : axiom production_rule_list    { NSLog(@"file"); }
     ;

在代码中使用@是否有任何风险?如果没有,如何告诉野牛这是合法使用@

提前致谢。

3 个答案:

答案 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"); }
     ;