Курс Raku / Регулярні вирази та граматики / Граматики / Граматики, класи та успадкування
Граматики — це класи
Коли ви пишете grammar, Raku створює щось дуже близьке
до класу. Токени є його методами, і до нього застосовується вся механіка
успадкування з частини про об’єкти.
Тож одна граматика може розширювати іншу за допомогою is,
точно як підклас:
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 успадковує TOP від Base,
але надає власний greeting. Коли Loud розбирає
текст, його TOP викликає <greeting>, і
використовується токен, перевизначений у Loud, — точно так,
як працює перевизначений метод на об’єктах.
Це робить граматики компонованими. Ви можете написати загальну граматику для формату, а потім вивести спеціалізовану версію, що змінює лише ті токени, які відрізняються, не копіюючи решту.
Навіть .parse, який ви весь час викликаєте, походить із
цієї класової природи: кожна граматика автоматично успадковує вбудований
базовий тип Grammar, який надає .parse (і його
родича для часткового зіставлення, .subparse). Ви ніколи не
пишете його самі — ви отримуєте його задарма, так само як звичайний клас
успадковує методи від свого батька.
Практика
Виконайте 1 тест за змістом цієї теми.
Навігація курсом
← Граматики, класи та успадкування | Тест — Успадкування граматик →
💪 Або перейдіть одразу до вправ цього
розділу.