Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

The Select Parser

Boost , ,

The Select Parser

Выбранные парсеры могут использоваться для идентификации одного парсера из заданного списка парсеров, который успешно распознает текущую входную последовательность. Пример:

    rule<> rule_select =
        select_p
        (
            parser_a
          , parser_b
            /* ... */
          , parser_n
        );

Парсеры (parser_a, parser_b и т.д.) проверяются последовательно слева направо, пока парсер не совпадет с текущей входной последовательностью. Если найден соответствующий парсер, парсер select_p возвращает позицию парсера (нулевой индекс). Например, в приведенном выше примере 1 возвращается при совпадении parser_b.

Существуют два предопределенных парсера семейства выбранных парсеров: select_p и select_fail_p. Эти парсеры отличаются тем, как обрабатывается случай отсутствия совпадений (когда ни один из парсеров не соответствует текущей последовательности ввода). При этом select_p Парсер вернется -1, если не будет найден соответствующий парсер, парсер select_fail_p вообще не будет совпадать.

Следующий образец показывает, как выбранный парсер может быть использован очень удобно в сочетании с парсером переключателя :

    int choice = -1;
    rule<> rule_select =
            select_fail_p('a', 'b', 'c', 'd')[assign_a(choice)]
        >>  switch_p(var(choice)) 
            [
case_p<0>(int_p),
case_p<1>(ch_p(',')),
case_p<2>(str_p("bcd")),
default_p
]
;

Этот пример показывает правило, которое соответствует:

  • «а»с последующим целым числом
  • «б»с последующим«,»
  • «c»с последующим"bcd";
  • один.

Для других входных последовательностей правило дачи вообще не соответствует.

BOOST_SPIRIT_SELECT_LIMIT

Количество возможных записей в парсере select_p ограничено постоянной времени компиляции Spirit BOOST_SPIRIT_SELECT_LIMIT, которая по умолчанию равна 3. Это значение не должно быть больше постоянной времени компиляции, заданной PHOENIX_LIMIT (см. phoenix). Пример:

// Define these before including anything else
#define PHOENIX_LIMIT 10
#define BOOST_SPIRIT_SELECT_LIMIT 10




 

Статья The Select Parser раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 08:39:58/0.0057361125946045/0