Back to Arangodb

The Select Parser

3rdParty/boost/1.78.0/libs/spirit/classic/doc/select_parser.html

3.12.9.12.4 KB
Original Source

| | The Select Parser | |

| | | | |

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:

  • 'a' followed by an integer
  • 'b' followed by a ','
  • 'c' followed by "bcd"
  • a single 'd'.

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)