LINUX.ORG.RU

История изменений

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