Курс языка программирования 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— ровно так же, как ведут себя переопределённые методы у объектов.