Курс Raku / Регулярні вирази та граматики / Граматики / Створення граматик / Вправи / Розберіть хештег

Розв’язання: Розберіть хештег

Ось одне з можливих розв’язань задачі.

Код

grammar Hashtag {
    token TOP { '#' <tag> }
    token tag { \w+ }
}

say Hashtag.parse('#raku')<tag>;

🦋 Знайдіть програму у файлі parse-hashtag.raku.

Вивід

「raku」

Коментарі

  1. TOP прописує фіксований #, за яким іде токен <tag>.

  2. .parse вимагає, щоб зіставився весь рядок, і після цього тег доступний як захоплення <tag>.

Альтернатива

Натомість можна дозволити tag зіставлятися з усім хештегом — із # разом зі словом — і дістатися до слова через вкладене правило word:

grammar Hashtag {
    token TOP  { <tag> }
    token tag  { '#' <word> }
    token word { \w+ }
}

say Hashtag.parse('#raku')<tag><word>;

Це друкує те саме 「raku」. Тепер <tag> захоплює весь #raku, а до слова всередині нього дістаються як <tag><word>. Граматика читається дещо більше схожою на річ, яку вона описує: хештег є #, за яким іде слово, а слово — це самостійна іменована частина.

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

Розберіть хештег   |   Розберіть час