Почему Flex говорит, что это «нераспознанное правило»? - PullRequest
2 голосов
/ 14 июля 2010

В следующих случаях:

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 Ответ

1 голос
/ 15 июля 2010

Если вы удалите ^ из определения 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}
...