Regulaaravaldiste disain
Loengus oli kaks ülesannet täisarvliteraalide äratundmiseks. Nende all mõtlesime kõik sõned, millele võis kuitahes palju nulle eelneda. Kirjutame nüüd kaks regulaaravaldist, mis on õpiku ülesanne 1.1 b) ja c) osa.
- Arvliteraalid, mille väärtus ei ole 42.
- Arvliteraalid, mille väärtus on rangelt suurem kui 42.
NB! Selles ülesannes saab ainult kasutada klassikaliste regulaaravaldiste vahendid. Lihtsad lühendid nagu [0-9]
, +
, ?
töötavad küll, aga epsilon asemel tuleb kasutada tühjad sulud ()
.
Automaatide abil
Mõnikord on kasulik mõelda automaadi peale, kui kirjutada regulaaravaldist. Proovige (klassikalisi) regulaaravaldisi kirjutada, mis sobituvad järgmiste sõnade hulkadega:
- Tähestiku {0,1} sõnad, milles esinevad täpselt üks '1' ja vähemalt üks '0'. (Praktikumis võime koos lahendada: slaidid).
- Tähestiku {a,b} sõnad, mis sisaldavad paarisarv a-sid ja paarisarv b-sid.
- Tähestiku {0,1} sõnad, mis ei sisalda alamsõnena "101".
- Kolmega jaguvad binaararvud.
Testimine ja esitamine
Neid võib nüüd testida kahel viisil:
- Interaktiivne programm RegexChallengeGUI on olemas testide kataloogis.
- Vastused tuleks kirjutada klassi AKTRegexChallenge ning käivitada unit teste klassist RegexChallengeTest. Sellisel kujul lahendust saab ka esitada.
Proovige natuke intuitiivselt seda lahendada, aga proovige ka automaadi põhjal neid luua. Te võite ka katsetada, kuidas jFlap teisendab automaat süstemaatiliselt regulaaravaldiseks.
Lahendust võiks moodle'isse üles laadida! Selle eest saab kokku kuni üks punkt ja parimate lahenduste esitajate vahel loosime välja Varmo Vene allkirjastatud käsitsi kirjutatud lekser!