LINUX.ORG.RU

Доступна первая бета С++ библиотеки lexy

 , , ,


1

2

Состоялся выпуск первой беты библиотеки комбинаторного парсинга lexy.

struct channel
{
    static constexpr auto rule = dsl::n_digits<2, dsl::hex>;
};

struct color
{
    static constexpr auto rule = dsl::hash_sign + dsl::times<3>(dsl::p<channel>) + dsl::eof;
};

using production = color;

Оф. сайт.

Поиграть с примерами.

GitHub.

★★★★★

Последнее исправление: dataman (всего исправлений: 1)

О, хотел попробовать его в одном проекте, но руки пока не дошли. Надо потыкать всё таки.

xaizek ★★★★★
()

Код примера обрезанный

ox55ff ★★★★★
()

А почему в color::rule есть dsl::eof, а в channel::rule нет?

И надеюсь, dsl::hash_sign – это шорткат для чего-нибудь типа dsl::char<'#'>. Или даже лучше dsl::literal<"#">.

pr849
()
Последнее исправление: pr849 (всего исправлений: 2)
Ответ на: комментарий от pr849

А почему в 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 ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)

Состоялся выпуск первой беты библиотеки комбинаторного парсинга lexy

парсинг

lexy

Обманутые ожидания.

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Представим на минутку, что у нас в channel::rule тоже есть dsl::eof:

Зачем?

Обманутые ожидания.

Переписав это на регулярки, выясним, что PCRE2 - гуано.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Зачем?

Не знаю, почитай ещё раз моё сообщение и то, на которое я отвечал, может поймёшь.

Переписав это на регулярки, выясним, что PCRE2 - гуано.

Причём тут вообще регулярки и PCRE2? Я всего лишь обратил внимание, что библиотека для парсинга называется lexy, а не parsy или как-нибудь ещё.

theNamelessOne ★★★★★
()

«как буст, но не буст».

zerhud
()
Ответ на: комментарий от theNamelessOne

Потому что очевидно, что в lexy тебе ещё рано, начни с азов.

Этот пользователь игнорирует Вас

Ок. Сам придумал представил, не понимая, зачем; сам поверил; сам обиделся.

dataman ★★★★★
() автор топика
Ответ на: комментарий от dataman

Ох лол, ну ладно, ты победил.

А расскажешь хоть, причем тут PCRE2?

Сам придумал представил, не понимая, зачем; сам поверил; сам обиделся.

Как иронично!

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.