Kurso de Raku / Regulesprimoj kaj gramatikoj / Gramatikoj / Agoklasoj
Enliniaj agoj kaj agoklasoj
Vi nun havas du manierojn alfiksi signifon al analizo. Kiun vi uzu?
Enliniaj agoj metas blokon { make … }
rekte ene de la ĵetono:
grammar Sum {
token TOP { <a> '+' <b> { make $<a>.Int + $<b>.Int } }
token a { \d+ }
token b { \d+ }
}Ili estas rapide skribeblaj kaj taŭgaj por eta gramatiko aŭ unufoja skripto. La kosto estas, ke la ŝablono kaj la logiko estas implikitaj kune.
Agoklaso tenas la du apartaj — la gramatiko priskribas la formon, la agoklaso priskribas la signifon:
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 }
}Ĉi tiu apartigo havas verajn avantaĝojn, kiam gramatiko kreskas: la ŝablono restas legebla, kaj vi povas pari unu gramatikon kun pluraj agoklasoj — unu, kiu taksas, unu, kiu bele presas, unu, kiu konstruas datumstrukturon — sen tuŝi la gramatikon entute.
La ĝenerala regulo: enliniaj agoj por io malgranda kaj unufoja, agoklaso por io ajn, kion vi prizorgos aŭ reuzos.
Praktiko
Vin atendas 1 kvizo pri la enhavo de ĉi tiu temo.
Kursa navigado
← Kvizo — make | Kvizo — Agoklasoj →
💪 Aŭ iru rekte al la ekzercoj de ĉi tiu
sekcio.