]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/spirit/doc/lex/quick_reference.qbk
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / spirit / doc / lex / quick_reference.qbk
CommitLineData
7c673cae
FG
1[/==============================================================================
2 Copyright (C) 2001-2011 Joel de Guzman
3 Copyright (C) 2001-2011 Hartmut Kaiser
4
5 Distributed under the Boost Software License, Version 1.0. (See accompanying
6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7===============================================================================/]
8
9This quick reference section is provided for convenience. You can use
10this section as a sort of a "cheat-sheet" on the most commonly used Lex
11components. It is not intended to be complete, but should give you an
12easy way to recall a particular component without having to dig through
13pages and pages of reference documentation.
14
15[/////////////////////////////////////////////////////////////////////////////]
16[section Common Notation]
17
18[variablelist Notation
19 [[`L`] [Lexer type]]
20 [[`l, a, b, c, d`] [Lexer objects]]
21 [[`Iterator`] [The type of an iterator referring to the underlying
22 input sequence]]
23 [[`IdType`] [The token id type]]
24 [[`Context`] [The lexer components `Context` type]]
25 [[`ch`] [Character-class specific character (See __char_class_types__)]]
26 [[`Ch`] [Character-class specific character type (See __char_class_types__)]]
27 [[`str`] [Character-class specific string (See __char_class_types__)]]
28 [[`Str`] [Character-class specific string type (See __char_class_types__)]]
29 [[`Attrib`] [An attribute type]]
30 [[`fa`] [A semantic action function with a signature:
31 `void f(Iterator&, Iterator&, pass_flag&, Idtype&, Context&)`.]]
32]
33
34[endsect]
35
36[/////////////////////////////////////////////////////////////////////////////]
37[section:lexers Primitive Lexer Components]
38
39[table
40 [[Expression] [Attribute] [Description]]
41 [[`ch`] [n/a] [Matches `ch`]]
42 [[`char_(ch)`] [n/a] [Matches `ch`]]
43 [[`str`] [n/a] [Matches regular expression `str`]]
44 [[`string(str)`] [n/a] [Matches regular expression `str`]]
45 [[`token_def<Attrib>`] [`Attrib`] [Matches the immediate argument]]
46 [[`a | b`] [n/a] [Matches any of the expressions `a` or `b`]]
47 [[`l[fa]`] [Attribute of `l`] [Call semantic action `fa` (after matching `l`).]]
48]
49
50[note The column /Attribute/ in the table above lists the parser attribute
51 exposed by the lexer component if it is used as a parser (see
52 __attribute__). A 'n/a' in this columns means the lexer component is not
53 usable as a parser.]
54
55[endsect]
56
57[/////////////////////////////////////////////////////////////////////////////]
58[section Semantic Actions]
59
60Has the form:
61
62 l[f]
63
64where `f` is a function with the signatures:
65
66 void f();
67 void f(Iterator&, Iterator&);
68 void f(Iterator&, Iterator&, pass_flag&);
69 void f(Iterator&, Iterator&, pass_flag&, Idtype&);
70 void f(Iterator&, Iterator&, pass_flag&, Idtype&, Context&);
71
72You can use __boost_bind__ to bind member functions. For function
73objects, the allowed signatures are:
74
75 void operator()(unused_type, unused_type, unused_type, unused_type, unused_type) const;
76 void operator()(Iterator&, Iterator&, unused_type, unused_type, unused_type) const;
77 void operator()(Iterator&, Iterator&, pass_flag&, unused_type, unused_type) const;
78 void operator()(Iterator&, Iterator&, pass_flag&, Idtype&, unused_type) const;
79 void operator()(Iterator&, Iterator&, pass_flag&, Idtype&, Context&) const;
80
81The `unused_type` is used in the signatures above to signify 'don't
82care'.
83
84For more information see __lex_actions__.
85
86[endsect]
87
88[/////////////////////////////////////////////////////////////////////////////]
89[section Phoenix]
90
91__boost_phoenix__ makes it easier to attach semantic actions. You just
92inline your lambda expressions:
93
94 l[phoenix-lambda-expression]
95
96__lex__ provides some __boost_phoenix__ placeholders to access important
97information from the `Context` that are otherwise difficult to extract.
98
99[variablelist Spirit.Lex specific Phoenix placeholders
100 [[`_start, _end`] [Iterators pointing to the begin and the end of the
101 matched input sequence.]]
102 [[`_pass`] [Assign `lex::pass_flags::pass_fail` to `_pass` to force the current match to fail.]]
103 [[`_tokenid`] [The token id of the matched token.]]
104 [[`_val`] [The token value of the matched token.]]
105 [[`_state`] [The lexer state the token has been matched in.]]
106 [[`_eoi`] [Iterator referring to the current end of the input sequence.]]
107]
108
109[tip All of the placeholders in the list above (except `_eoi`) can be changed
110 from the inside of the semantic action allowing to modify the lexer
111 behavior. They are defined in the namespace `boost::spirit::lex`.]
112
113For more information see __lex_actions__.
114
115[endsect]
116
117