Kurso de Raku / Regulesprimoj kaj gramatikoj / Gramatikoj / Gramatikoj, klasoj kaj heredo
Gramatikoj estas klasoj
Kiam vi skribas grammar, Raku kreas ion tre proksiman al
klaso. La ĵetonoj estas metodoj sur ĝi, kaj la tuta maŝinaro de heredo el la parto pri objektoj
aplikiĝas. Do unu gramatiko povas etendi alian per is,
ĝuste kiel subklaso:
grammar Base {
token TOP { <greeting> }
token greeting { 'hi' }
}
grammar Loud is Base {
token greeting { 'HI' }
}
say Loud.parse('HI').defined; # True
say Base.parse('hi').defined; # TrueLoud heredas TOP de Base sed
provizas sian propran greeting. Kiam Loud
analizas, ĝia TOP vokas <greeting>, kaj
la superreganta ĵetono en Loud estas uzata — ekzakte kiel
superregita metodo funkcias sur objektoj.
Tio faras gramatikojn kunmeteblaj. Vi povas skribi ĝeneralan gramatikon por formato kaj poste derivi specialigitan version, kiu ŝanĝas nur la ĵetonojn, kiuj diferencas, sen kopii la reston.
Eĉ la .parse, kiun vi daŭre vokas, venas de ĉi tiu klasa
naturo: ĉiu gramatiko aŭtomate heredas de enkonstruita baza tipo nomata
Grammar, kiu provizas .parse (kaj ĝian
part-kongruan kuzon, .subparse). Vi neniam skribas ĝin mem
— vi ricevas ĝin senpage, ĝuste kiel ordinara klaso heredas metodojn de
sia patro.
Praktiko
Vin atendas 1 kvizo pri la enhavo de ĉi tiu temo.
Kursa navigado
← Gramatikoj, klasoj kaj heredo | Kvizo — Heredi gramatikojn →
💪 Aŭ iru rekte al la ekzercoj de ĉi tiu
sekcio.