• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1[/==============================================================================
2    Copyright (C) 2001-2011 Joel de Guzman
3    Copyright (C) 2001-2011 Hartmut Kaiser
4    Copyright (C) 2011 Jamboree
5
6    Distributed under the Boost Software License, Version 1.0. (See accompanying
7    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8===============================================================================/]
9
10[section:seek Qi Seek Parser Directive ]
11
12[heading Description]
13
14The `seek[]` parser-directive skips all input until the subject parser matches.
15
16[heading Header]
17
18    // forwards to <boost/spirit/repository/home/qi/directive/seek.hpp>
19    #include <boost/spirit/repository/include/qi_seek.hpp>
20
21Also, see __include_structure__.
22
23[heading Namespace]
24
25[table
26    [[Name]]
27    [[`boost::spirit::repository::qi::seek`]]
28]
29
30[heading Model of]
31
32[:__unary_parser_concept__]
33
34[variablelist Notation
35    [[`a`]          [A __parser_concept__.]]
36]
37
38[heading Expression Semantics]
39
40Semantics of an expression is defined only where it differs from, or is
41not defined in __unary_parser_concept__.
42
43[table
44    [[Expression]               [Semantics]]
45    [[`seek[a]`]                [Advances until the parser `a` matches.]]
46]
47
48[heading Attributes]
49
50See __qi_comp_attr_notation__.
51
52[table
53    [[Expression]       [Attribute]]
54    [[`seek[a]`]
55[``a: A --> seek[a]: A
56a: Unused --> seek[a]: Unused``]]
57]
58
59[heading Complexity]
60
61[:The overall complexity is defined by the complexity of its subject
62parser. The complexity of `seek` itself is O(N), where N is the number
63of unsuccessful matches.]
64
65[note *seeking sequence with skipping*
66
67Using `seek[a >> b]` with skipping is inefficient, because when sequence fails, the backtracked position is non-skipped.
68The solution is to ensure the input will always be pre-skipped, for example:
69``
70    seek[lexeme[skip[a >> b]]]
71``
72does the trick.]
73
74[heading Example]
75
76[import ../../example/qi/seek.cpp]
77
78The following example shows a simple use case of the `seek[]` directive, parsing C-style comment.
79(For the full source of the example, see [@../../example/qi/seek.cpp seek.cpp])
80
81Some namespace aliases:
82
83[reference_qi_seek_namespace]
84
85The input string and its iterators:
86
87[reference_qi_seek_vars]
88
89Parsing and showing the result:
90
91[reference_qi_seek_parse]
92
93[endsect]
94