• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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__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 __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
118