Курс 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; # True

Loud успадковує TOP від Base, але надає власний greeting. Коли Loud розбирає текст, його TOP викликає <greeting>, і використовується токен, перевизначений у Loud, — точно так, як працює перевизначений метод на об’єктах.

Це робить граматики компонованими. Ви можете написати загальну граматику для формату, а потім вивести спеціалізовану версію, що змінює лише ті токени, які відрізняються, не копіюючи решту.

Навіть .parse, який ви весь час викликаєте, походить із цієї класової природи: кожна граматика автоматично успадковує вбудований базовий тип Grammar, який надає .parse (і його родича для часткового зіставлення, .subparse). Ви ніколи не пишете його самі — ви отримуєте його задарма, так само як звичайний клас успадковує методи від свого батька.

Практика

Виконайте 1 тест за змістом цієї теми.

Навігація курсом

Граматики, класи та успадкування   |   Тест — Успадкування граматик


💪 Або перейдіть одразу до вправ цього розділу.