Курс по Raku / Регулярни изрази и граматики / Граматики / Граматики, класове и наследяване / Exercises / Наследете граматика
Решение: Наследете граматика
Ето едно възможно решение на задачата.
Код
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, точно както се държат предефинираните методи върху обекти.