2

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

warning: stray `@'

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

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

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

提前致谢。

4

3 回答 3

2

该消息只是一个警告。你可以忽略它。如果您使用的是 Xcode,它甚至不会在问题导航器中向您显示警告。

重命名您的 Bison 输入文件以具有.ym扩展名而不是.y扩展名。这告诉 Xcode 这是一个带有 Objective-C 动作的语法。

于 2012-12-29T20:36:51.140 回答
2

如果要抑制警告,可以使用#define AT @.

大括号中的代码只是被复制,除了用代码替换 $… 序列以提供相关标记。这似乎适用于 Objective-C,但如果您使用 ARC,您可能需要进行一些挖掘(或只是添加额外的块(在 C 意义上))以确保尽快释放对象。

于 2013-06-21T01:26:02.590 回答
0

根据Actions - Bison 2.7中的文档,花括号之间的代码似乎应该是 C 代码。因此,我怀疑您可以在那里使用objective-c 构造。

但是,您可以创建一个外部 C 函数来为您完成工作:

Logit(char* message)
{
  NSLog(@"%s",message);
}

并在 Bison 动作中使用它

file : axiom production_rule_list    { Logit("file"); }
     ;
于 2012-12-29T19:37:17.097 回答