为什么Flex说这是一个“未被承认的规则”?

时间:2010-07-14 02:33:03

标签: regex flex-lexer

以下内容:

space           ([ \t\f\r])+         
opt_space       ([ \t\f\r])*         
cpp             ^{opt_space}#{opt_space} 
word            [A-Za-z_][A-Za-z_0-9]*
arg_macro       {cpp}define{space}{word}
/*arg_macro       ^{opt_space}#{opt_space}define{space}{word}*/

%%
{arg_macro}     ;
%%

我收到错误消息

test.l:9: unrecognized rule

如果我取消注释arg_macro的第二个版本并对第一个版本发表评论,则错误消息将消失。

任何想法为什么?

1 个答案:

答案 0 :(得分:1)

如果从cpp定义中删除^,并将其放在arg_macro定义中,那么很高兴。

space           ([ \t\f\r])+
opt_space       ([ \t\f\r])*
cpp             {opt_space}#{opt_space}
word            [A-Za-z_][A-Za-z_0-9]*
arg_macro       ^{cpp}define{space}{word}