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

[section Nonterminal]

[heading Module Headers]

    // forwards to <boost/spirit/home/karma/nonterminal.hpp>
    #include <boost/spirit/include/karma_nonterminal.hpp>

Also, see __include_structure__.

[//////////////////////////////////////////////////////////////////////////////]
[section Rule]

[heading Description]

The rule is a polymorphic generator that acts as a named place-holder
capturing the behavior of a PEG expression assigned to it. Naming a
__peg__ expression allows it to be referenced later and makes it
possible for the rule to call itself. This is one of the most important
mechanisms and the reason behind the word "recursive" in recursive
descent output generation.

[heading Header]

    // forwards to <boost/spirit/home/karma/nonterminal/rule.hpp>
    #include <boost/spirit/include/karma_rule.hpp>

Also, see __include_structure__.

[heading Namespace]

[table
    [[Name]]
    [[`boost::spirit::karma::rule`]]
]

[heading Synopsis]

    template <typename OutputIterator, typename A1, typename A2, typename A3>
    struct rule;

[heading Template parameters]

[table
    [[Parameter]            [Description]                   [Default]]
    [[`OutputIterator`]     [The underlying output iterator 
                            type that the rule is  
                            expected to work on.]           [none]]
    [[`A1`, `A2`, `A3`]     [Either `Signature`, 
                            `Delimiter` or `Locals` in 
                            any order. See table below.]    [See table below.]]
]

Here is more information about the template parameters:

[table
    [[Parameter]            [Description]                   [Default]]
    [[`Signature`]          [Specifies the rule's consumed 
                            (value to output) and inherited 
                            (arguments) attributes. More on
                            this here: __karma_nonterminal_concept__.]
                                                           [__unused_type__. 
                                                            When `Signature` defaults 
                                                            to __unused_type__, the effect 
                                                            is the same as specifying a signature
                                                            of `void()` which is also equivalent 
                                                            to `unused_type()`]]
    [[`Delimiter`]          [Specifies the rule's delimiter 
                            generator. Specify this if you
                            want the rule to delimit the 
                            generated output.]              [__unused_type__]]
    [[`Locals`]             [Specifies the rule's local
                            variables. See __karma_nonterminal_concept__.]
                                                            [__unused_type__]]
]

[heading Model of]

[:__karma_nonterminal_concept__]

[variablelist Notation
    [[`r, r2`]                  [Rules]]
    [[`g`]                      [A generator expression]]
    [[`OutputIterator`]         [The underlying output iterator type that the rule is  
                                 expected to work on.]]
    [[`A1`, `A2`, `A3`]         [Either `Signature`, `Delimiter` or `Locals` in 
                                 any order.]]
]

[heading Expression Semantics]

Semantics of an expression is defined only where it differs from, or is
not defined in __karma_nonterminal_concept__.

[table
    [[Expression]                               [Description]]
    [[
``rule<OutputIterator, A1, A2, A3> 
    r(name);``] 
                                                [Rule declaration. `OutputIterator` is required.
                                                `A1, A2, A3` are optional and can be specified in any order.
                                                `name` is an optional string that gives the rule
                                                its name, useful for debugging.]]
    [[
``rule<OutputIterator, A1, A2, A3> 
    r(r2);``]                                   [Copy construct rule `r` from rule `r2`.]]
    [[`r = r2;`]                                [Assign rule `r2` to `r`.]]
    [[`r.alias()`]                              [Return an alias of `r`. The alias is a generator that
                                                 holds a reference to `r`. Reference semantics.]]
    [[`r.copy()`]                               [Get a copy of `r`.]]
    [[`r = g;`]                                 [Rule definition]]
    [[`r %= g;`]                                [Auto-rule definition. The attribute of `g` should be
                                                 compatible with the consumed attribute of `r`.]]
]

[heading Attributes]

[:The rule's generator attribute is `RT`: The consumed attribute of the
rule. See __karma_nonterminal_attribute__]

[heading Complexity]

[:The complexity is defined by the complexity of the RHS generator, `g`]

[heading Example]

[note The test harness for the example(s) below is presented in the
      __karma_basics_examples__ section.]

[karma_reference_rule]

[endsect] [/ Rule]

[////////////////////////////////////////////////////////////////////////////////]
[section Grammar]

[heading Description]

The grammar encapsulates a set of __karma_rules__ (as well as primitive
generators (__primitive_generator_concept__) and sub-grammars). The grammar is
the main mechanism for modularization and composition. Grammars can be
composed to form more complex grammars.

[heading Header]

    // forwards to <boost/spirit/home/karma/nonterminal/grammar.hpp>
    #include <boost/spirit/include/karma_grammar.hpp>

Also, see __include_structure__.

[heading Namespace]

[table
    [[Name]]
    [[`boost::spirit::karma::grammar`]]
]

[heading Synopsis]

    template <typename OutputIterator, typename A1, typename A2, typename A3>
    struct grammar;

[heading Template parameters]

[table
    [[Parameter]            [Description]                   [Default]]
    [[`OutputIterator`]     [The underlying output iterator 
                            type that the rule is  
                            expected to work on.]           [none]]
    [[`A1`, `A2`, `A3`]     [Either `Signature`, 
                            `Delimiter` or `Locals` in 
                            any order. See table below.]    [See table below.]]
]

Here is more information about the template parameters:

[table
    [[Parameter]            [Description]                   [Default]]
    [[`Signature`]          [Specifies the grammar's synthesized 
                            (return value) and inherited 
                            attributes (arguments). More on
                            this here: __karma_nonterminal_concept__.]
                                                           [__unused_type__. 
                                                            When `Signature` defaults 
                                                            to __unused_type__, the effect 
                                                            is the same as specifying a signature
                                                            of `void()` which is also equivalent 
                                                            to `unused_type()`]]
    [[`Delimiter`]          [Specifies the grammar's delimiter 
                            generator. Specify this if you
                            want the grammar to delimit the 
                            generated output.]              [__unused_type__]]
    [[`Locals`]             [Specifies the grammar's local
                            variables. See __karma_nonterminal_concept__.]
                                                            [__unused_type__]]
]

[heading Model of]

[:__karma_nonterminal_concept__]

[variablelist Notation
    [[`g`]                      [A grammar]]
]

[heading Expression Semantics]

Semantics of an expression is defined only where it differs from, or is not
defined in __karma_nonterminal_concept__.

[table
    [[Expression]       [Semantics]]
    [[
``
    template <typename OutputIterator>
    struct my_grammar : grammar<OutputIterator, A1, A2, A3>
    {
        my_grammar() : my_grammar::base_type(start, name)
        {
            // Rule definitions
            start = /* ... */;
        }

        rule<OutputIterator, A1, A2, A3> start;
        // more rule declarations...
    };
``
    ]                   [Grammar definition. `name` is an optional string that gives the
                        grammar its name, useful for debugging.]]
]

[note The template parameters of a grammar and its start rule (the rule passed 
      to the grammar's base class constructor) must match, otherwise you will 
      see compilation errors.]

[heading Attributes]

[:The generator attribute of the grammar is `RT`, its consumed attribute. See
__karma_nonterminal_attribute__]

[heading Complexity]

[:The complexity is defined by the complexity of the its definition.]

[heading Example]

[note The test harness for the example(s) below is presented in the
      __karma_basics_examples__ section.]

[karma_reference_grammar_using]

[karma_reference_grammar_definition]

[karma_reference_grammar]

[endsect] [/ Grammar]

[endsect]
