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