3rdParty/boost/1.78.0/libs/spirit/classic/doc/select_parser.html
Select parsers may be used to identify a single parser from a given list of parsers, which successfully recognizes the current input sequence. Example:
rule\<\>rule_select=select_p (parser_a ,parser_b /\* ... \*/ ,parser_n);
The parsers (parser_a, parser_b etc.) are tried sequentially from left to right until a parser matches the current input sequence. If there is a matching parser found, the select_p parser returns the parser's position (zero based index). For instance, in the example above, 1 is returned if parser_b matches.
There are two predefined parsers of the select parser family: select_p and select_fail_p. These parsers differ in the way the no match case is handled (when none of the parsers match the current input sequence). While the select_p parser will return -1 if no matching parser is found, the select_fail_p parser will not match at all.
The following sample shows how the select parser may be used very conveniently in conjunction with a switch parser:
intchoice=-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
]
;
This example shows a rule, which matches:
For other input sequences the give rule does not match at all.
|
BOOST_SPIRIT_SELECT_LIMIT
The number of possible entries inside the select_p parser is limited by the Spirit compile time constant BOOST_SPIRIT_SELECT_LIMIT, which defaults to 3. This value should not be greater than the compile time constant given by PHOENIX_LIMIT (see phoenix). Example:
// Define these before including anything else
#define PHOENIX_LIMIT 10
#define BOOST_SPIRIT_SELECT_LIMIT 10
|
Copyright © 2003-2004 Hartmut Kaiser
Use, modification and distribution is subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE\_1\_0.txt)