Cette question peut sembler un peu confuse. J'utilise Flex pour passer des jetons à Bison. Le comportement que je souhaite est que Flex corresponde à l'expression régulière la plus longue et passe ce jeton (cela fonctionne comme cela), mais si ce jeton ne fonctionne pas avec la grammaire, il correspond à la deuxième expression régulière la plus longue et passe ce jeton. J'ai du mal à trouver un moyen de créer ce comportement. Comment pourrais-je y arriver?Comment faire pour tester la seconde expression régulière correspondante la plus longue?
Pour clarifier les choses, par exemple, que j'ai deux règles:
"//" return TOKEN_1;
"///" return TOKEN_2;
Compte tenu de la chaîne "///"
, je voudrais que ce premier passage TOKEN_2
(il fait). Si TOKEN_2
ne correspond pas à la grammaire spécifiée dans Bison, il passe alors TOKEN_1
(ce qui est également valide).
Comment est-ce que je peux créer ce comportement?
Je travaille avec un fichier volumineux et n'utilise pas de système avec un terminal. Il m'est donc difficile de vérifier les choses à l'aide d'un exemple simple. Ce n'est pas le comportement par défaut, n'est-ce pas? –
Voulez-vous cela pour un ensemble spécifique de règles, ou pour toutes les règles en général? Si ce dernier, je serais surpris si vous avez accompli cela en utilisant flex. S'il s'agit d'un ensemble spécifique de règles, vous pouvez et devriez refactoriser les règles. – Kizaru
Cette situation de jeton ne concerne que deux jetons différents. Fondamentalement, c'est j'essaye de traiter un commentaire comme un type spécifique de commentaire, mais si cela cause un problème alors juste le traiter comme un commentaire régulier. Il serait très difficile de refactoriser mes règles de cette manière, et si je pouvais obtenir ce jeton en passant la méthode au travail, je pense que ce serait beaucoup plus simple. –