История изменений
Исправление 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? (Спойлер: не сможет.)