2
Dans ce qui suit:Pourquoi Flex dit-il qu'il s'agit d'une "règle non reconnue"?
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} ;
%%
Je reçois un message d'erreur
test.l:9: unrecognized rule
Si je décommenter la deuxième version de arg_macro
et de commenter le premier, le message d'erreur disparaît.
Des idées pourquoi?
OK, merci; Y a-t-il une raison à cela ou l'avez-vous trouvée par essais et erreurs? –
Je jouais autour de trouver la sous-partie du problème réel. Mais j'ai ensuite lu la page de manuel flex, etc. Il y a des notes contradictoires, sur une page que j'ai lues, vous pouvez seulement^au début de la chaîne être interprété comme des ancres de début de ligne, sinon c'est juste le jeton. Je suppose que flex pense qu'il est invalide d'imbriquer un jeton de début de ligne après le début de la ligne, ainsi la définition avec cette ancre à l'intérieur n'est pas valide pour l'autre expansion de jeton. Ceci est basé sur le libellé de l'erreur, cela implique que la définition de cpp n'existe pas. Je devrais lire le code pour en savoir plus. –
Ok, en lisant le code flex de gnu: les règles de ligne de départ, semblent être placées dans une liste différente des autres règles, et lors de la résolution des symboles nommés, il recherche la deuxième liste. –