История изменений
Исправление theNamelessOne, (текущая версия) :
А почему в
color::rule
естьdsl::eof
, а вchannel::rule
нет?
tl;dr: из примера очевидно, что channel::rule
— это вспомогательное (для color::rule
) правило вывода.
Ну или давай вместе посмотрим. Из примера (using production = color;
) видно, что мы хотим парсить color
(т.е. строку вида #DEADBABE
). Представим на минутку, что у нас в channel::rule
тоже есть dsl::eof
:
struct channel
{
static constexpr auto rule = dsl::n_digits<2, dsl::hex> + dsl::eof;
};
Сделаем подстановку нашего изменённого правила channel
в правило color
:
struct color
{
static constexpr auto rule =
dsl::hash_sign +
dsl::n_digits<2, dsl::hex> + dsl::eof +
dsl::n_digits<2, dsl::hex> + dsl::eof +
dsl::n_digits<2, dsl::hex> + dsl::eof +
dsl::eof;
};
Вопрос: сможет ли такое правило вывода сматчить строку #DEADBABE
? (Спойлер: не сможет.)
Исходная версия theNamelessOne, :
А почему в
color::rule
естьdsl::eof
, а вchannel::rule
нет?
Ну вот давай вместе посмотрим. Из примера видно, что мы хотим парсить color
(т.е. строку вида #DEADBABE
). Представим на минутку, что у нас в channel::rule
тоже есть dsl::eof
:
struct channel
{
static constexpr auto rule = dsl::n_digits<2, dsl::hex> + dsl::eof;
};
Сделаем подстановку нашего изменённого правила channel
в правило color
:
struct color
{
static constexpr auto rule =
dsl::hash_sign +
dsl::n_digits<2, dsl::hex> + dsl::eof +
dsl::n_digits<2, dsl::hex> + dsl::eof +
dsl::n_digits<2, dsl::hex> + dsl::eof +
dsl::eof;
};
Вопрос: сможет ли такое правило вывода сматчить строку #DEADBABE
? (Спойлер: не сможет.)