[/==============================================================================
    Copyright (C) 2001-2010 Joel de Guzman
    Copyright (C) 2001-2010 Hartmut Kaiser

    Distributed under 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)
===============================================================================/]

This quick reference section is provided for convenience. You can use
this section as a sort of a "cheat-sheet" on the most commonly used Lex
components. It is not intended to be complete, but should give you an
easy way to recall a particular component without having to dig through
pages and pages of reference documentation.

[/////////////////////////////////////////////////////////////////////////////]
[section Common Notation]

[variablelist Notation
    [[`L`]              [Lexer type]]
    [[`l, a, b, c, d`]  [Lexer objects]]
    [[`Iterator`]       [The type of an iterator referring to the underlying 
                         input sequence]]
    [[`IdType`]         [The token id type]]
    [[`Context`]        [The lexer components `Context` type]]
    [[`ch`]             [Character-class specific character (See __char_class_types__)]]
    [[`Ch`]             [Character-class specific character type (See __char_class_types__)]]
    [[`str`]            [Character-class specific string (See __char_class_types__)]]
    [[`Str`]            [Character-class specific string type (See __char_class_types__)]]
    [[`Attrib`]         [An attribute type]]
    [[`fa`]             [A semantic action function with a signature: 
                         `void f(Iterator&, Iterator&, pass_flag&, Idtype&, Context&)`.]]
]

[endsect]

[/////////////////////////////////////////////////////////////////////////////]
[section:lexers Primitive Lexer Components]

[table 
    [[Expression]        [Attribute]         [Description]]
    [[`ch`]              [n/a]               [Matches `ch`]]
    [[`char_(ch)`]       [n/a]               [Matches `ch`]]
    [[`str`]             [n/a]               [Matches regular expression `str`]]
    [[`string(str)`]     [n/a]               [Matches regular expression `str`]]
    [[`token_def<Attrib>`] [`Attrib`]        [Matches the immediate argument]]
    [[`a | b`]           [n/a]               [Matches any of the expressions `a` or `b`]]
    [[`l[fa]`]           [Attribute of `l`]  [Call semantic action `fa` (after matching `l`).]]
]

[note  The column /Attribute/ in the table above lists the parser attribute 
       exposed by the lexer component if it is used as a parser (see 
       __attribute__). A 'n/a' in this columns means the lexer component is not
       usable as a parser.]

[endsect]

[/////////////////////////////////////////////////////////////////////////////]
[section Semantic Actions]

Has the form:

    l[f]

where `f` is a function with the signatures:

    void f();
    void f(Iterator&, Iterator&);
    void f(Iterator&, Iterator&, pass_flag&);
    void f(Iterator&, Iterator&, pass_flag&, Idtype&);
    void f(Iterator&, Iterator&, pass_flag&, Idtype&, Context&);

You can use __boost_bind__ to bind member functions. For function
objects, the allowed signatures are:

    void operator()(unused_type, unused_type, unused_type, unused_type, unused_type) const;
    void operator()(Iterator&, Iterator&, unused_type, unused_type, unused_type) const;
    void operator()(Iterator&, Iterator&, pass_flag&, unused_type, unused_type) const;
    void operator()(Iterator&, Iterator&, pass_flag&, Idtype&, unused_type) const;
    void operator()(Iterator&, Iterator&, pass_flag&, Idtype&, Context&) const;

The `unused_type` is used in the signatures above to signify 'don't
care'.

For more information see __lex_actions__.

[endsect]

[/////////////////////////////////////////////////////////////////////////////]
[section Phoenix]

__boost_phoenix__ makes it easier to attach semantic actions. You just
inline your lambda expressions:

    l[phoenix-lambda-expression]

__lex__ provides some __boost_phoenix__ placeholders to access important
information from the `Context` that are otherwise difficult to extract.

[variablelist Spirit.Lex specific Phoenix placeholders
    [[`_start, _end`]          [Iterators pointing to the begin and the end of the
                                matched input sequence.]]
    [[`_pass`]                 [Assign `lex::pass_flags::pass_fail` to `_pass` to force the current match to fail.]]
    [[`_tokenid`]              [The token id of the matched token.]]
    [[`_val`]                  [The token value of the matched token.]]
    [[`_state`]                [The lexer state the token has been matched in.]]
    [[`_eoi`]                  [Iterator referring to the current end of the input sequence.]]
]

[tip  All of the placeholders in the list above (except `_eoi`) can be changed 
      from the inside of the semantic action allowing to modify the lexer 
      behavior. They are defined in the namespace `boost::spirit::lex`.]

For more information see __lex_actions__.

[endsect]


