Raku kurss / Regulārās izteiksmes un gramatikas / Gramatikas / Darbību klases

Iekļautās darbības un darbību klases

Tagad jums ir divi veidi, kā parsējumam piesaistīt nozīmi. Kuru izmantot?

Iekšējās darbības ieliek bloku { make … } tieši marķiera iekšienē:

grammar Sum {
    token TOP { <a> '+' <b> { make $<a>.Int + $<b>.Int } }
    token a   { \d+ }
    token b   { \d+ }
}

Tās ir ātri uzrakstāmas un der sīkai gramatikai vai vienreizējam skriptam. Cena ir tā, ka raksturs un loģika ir savijušies kopā.

Darbību klase abus tur nošķirti — gramatika apraksta formu, darbību klase apraksta nozīmi:

grammar Sum {
    token TOP { <a> '+' <b> }
    token a   { \d+ }
    token b   { \d+ }
}

class SumActions {
    method TOP($/) { make $<a>.made + $<b>.made }
    method a($/)   { make $/.Int }
    method b($/)   { make $/.Int }
}

Šai nošķiršanai ir īsti ieguvumi, gramatikai augot: raksturs paliek lasāms, un vienu gramatiku var savienot ar vairākām darbību klasēm — vienu, kas izrēķina, otru, kas glīti izdrukā, trešo, kas uzbūvē datu struktūru —, gramatiku vispār neaiztiekot.

Īkšķa likums: iekšējās darbības kaut kam mazam un vienreizējam, darbību klase visam, ko uzturēsiet vai izmantosiet atkārtoti.

Prakse

Jūs gaida 1 viktorīna par šī temata saturu.

Kursa navigācija

Viktorīna — make   |   Viktorīna — Darbību klases


💪 Vai arī dodieties tieši uz šīs sadaļas vingrinājumiem.