Курс Raku / Регулярні вирази та граматики / Граматики / Граматики, класи та успадкування / Вправи / Успадкуйте граматику
Розв’язання: Успадкуйте граматику
Ось одне з можливих розв’язань задачі.
Код
grammar Animal {
token TOP { <sound> }
token sound { \w+ }
}
grammar Dog is Animal {
token sound { 'woof' }
}
grammar Cat is Animal {
token sound { 'meow' }
}
say Dog.parse('woof').defined;
say Cat.parse('meow').defined;
say Dog.parse('meow').defined;🦋 Знайдіть програму у файлі inherit-a-grammar.raku.
Вивід
True
True
FalseКоментарі
І
Dog is Animal, іCat is Animalуспадковують токенTOPвід базової граматики без змін; кожна надає лише власнийsound.Тож одну базову граматику розширено двома різними способами.
Dogзіставляється лише зwoof, аCat— лише зmeow; саме томуDog.parse('meow')зазнає невдачі: собака зберігає власний перевизначенийsound, рівно так, як поводяться перевизначені методи на об’єктах.