Курс по 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 тест върху съдържанието на тази тема.
Навигация в курса
← Граматики, класове и наследяване | Тест — Наследяване на граматики →
💪 Или преминете направо към упражненията в този
раздел.