Supposons que j'ai une expression régulière lex commeLes conditions d'erreur de gestion dans Lex plutôt que Yacc?
[aA][0-9]{2,2}[pP][sS][nN]? { return TOKEN; }
Si un utilisateur entre
A75PsN
A75PS
Il égalera
Mais si un utilisateur dit quelque chose comme
A75PKN
I voudrait qu'il erreur et dise "Caractère K non reconnu, attend S "
Ce que je fais en ce moment est juste en train d'écrire comme
let [a-zA-Z]
num [0-9]
{let}{num}{2,2}{let}{2,3}
Et puis essentiellement re-lexing la chaîne en Yacc pour que je puisse avoir des conditions d'erreur significatives
Comment puis-je contourner ce?
La seule chose que je peux penser est d'utiliser des groupes nommés?
Très bonne réponse. Ne devrait pas valider_id_string() être comme validate_id_string (yytext) ?? Passer dans le yytext pour valider? – DevDevDev
@DevDevDev: transmettre yytext est optionnel puisque yytext est global. Cela dépend en partie si vous utiliserez la fonction ailleurs. Oui, les paramètres sont meilleurs que les globaux. Mais j'illustre la technique générale, pas les subtilités minutieuses du bon style de codage. –
Merci! Je n'essayais pas de commenter le style de codage que je me demandais si vous vouliez dire validate_id_string accéderait à yytext. – DevDevDev