Cursus Raku / Reguliere expressies en grammatica’s / Grammatica’s / Grammatica’s, klassen en overerving / Exercises / Erf een grammatica

Oplossing: Erf een grammatica

Hier is een mogelijke oplossing voor de taak.

Code

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;

🦋 Je kunt de broncode vinden in het bestand inherit-a-grammar.raku.

Uitvoer

True
True
False

Opmerkingen

  1. Zowel Dog is Animal als Cat is Animal erft het token TOP ongewijzigd van de basis; elk levert alleen zijn eigen sound.

  2. Zo wordt één basisgrammatica op twee verschillende manieren uitgebreid. Dog matcht alleen woof en Cat alleen meow — en daarom mislukt Dog.parse('meow'): een hond houdt zijn eigen overschreven sound, precies zoals overschreven methoden zich op objecten gedragen.

Cursusnavigatie

Erf een grammatica   |   Een getal met proto