Why does Flex say this is an “unrecognized rule”?

2019-05-26 08:01发布

In the following:

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}     ;
%%

I get an error message

test.l:9: unrecognized rule

If I uncomment the second version of arg_macro and comment the first one, the error message goes away.

Any ideas why?

1条回答
Anthone
2楼-- · 2019-05-26 09:01

If you remove the ^ from the cpp definition, and place it in the arg_macro definition, then it's happy.

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}
查看更多
登录 后发表回答