Cursus Raku / Addendum 🆕 / Genera et machinae textuales / Expressiones regulares et grammaticae / Exercises / Identificatores proba

Solutio: Identificatores proba

Ecce solutio possibilis huius exercitationis.

Codex

for <count total2 2fast my-var _hidden> -> $name {
    my $ok = $name ~~ / ^ <[A..Za..z_]> <[A..Za..z0..9_]>* $ /;

    say "$name: { $ok ?? 'valid' !! 'invalid' }";
}

🦋 Inveni codicem fontem in archivo validate-identifier.raku.

Exitus

count: valid
total2: valid
2fast: invalid
my-var: invalid
_hidden: valid

Commentarii

  1. Ancorae ^ et $ exemplar cogunt totam catenam tegere, itaque unum signum errans ut lineola in my-var illud invalidum facit.

  2. Prima classis signorum litteram vel lineolam infimam permittit; secunda, per * repetita, cifras insuper permittit — regulae identificatoris classicae exacte congruens.

  3. Secunda classis etiam ut \w scribi potest, compendium incorporatum pro signo verbali (littera, cifra vel lineola infima):

    my $ok = $name ~~ / ^ <[A..Za..z_]> \w* $ /;

    Una differentia notanda: \w in Raku Unicode novit, itaque nomen ut café quoque transit — quod forte Raku ipsi congruit, ubi my $café = 1; prorsus legitimum est. Classis expresse scripta <[A..Za..z0..9_]> probationem stricte ad ASCII servat.

  4. Est tamen versura: in Raku ipso my-var identificator validus est! Raku lineolam (vel apostrophum, ut in isn't) intra nomen permittit, dum littera sequitur — quapropter subprogrammata ut is-prime tam naturaliter leguntur. Ut identificatores Raku probes, permitte tales greges post partem classicam:

    for <count total2 2fast my-var _hidden> -> $name {
        my $ok = $name ~~ / ^ <[A..Za..z_]> \w* [ '-' <[A..Za..z]> \w* ]* $ /;
    
        say "$name: { $ok ?? 'valid' !! 'invalid' }";
    }

    Unusquisque grex uncis inclusus [ '-' <[A..Za..z]> \w* ] lineolam solum tunc accipit cum littera sequitur, itaque my-var nunc ut validus nuntiatur, dum 2fast — et catenae ut a- vel a-1 — adhuc non sunt.

Identificatores proba   |   Grammatica nominum plenorum