$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Eric Niebler (eric_at_[hidden])
Date: 2008-03-22 23:12:24
Larry Evans wrote:
> On 03/04/08 11:38, Eric Niebler wrote:
>> An expression is a grammar, but a grammar is not an expression. For 
>> example, not_<X> is only a grammar and not an expression.
>>
> 
> The following grammar I think summarizes the difference between
> grammar and expression:
> 
> expr //describes an expression.
>    = terminal
>    | expr+
>      //i.e. 1 or more expressions (e.g. expr<tag::plus,expr0,expr1>)
>    ;
OK.
> gram //describes a grammar
>    = expr
>    | wildcard //struct wildcardns_::_ in matches.hpp
>    | control  //any struct or class template in namespace control in
>               //matches.hpp
>    ;
OK.
> control
>    = not_ >> gram
>    | or_  >> gram >> gram+
>    | and_ >> gram >> gram+
>    | if_  >> gram >> gram
>    ;
I may have an issue with your notation here.
control
    = not_<gram>
    | or_<gram+>
    | and_<gram+>
    | if_<trans, gram, gram>
    // or a vararg expr, or switch_, or ...
    ;
> The  '= expr' as first alternate of gram reflects the statement
> 'an expression is a grammar'.  The absence of gram on the
> rhs of the expr equation reflects the statement 'a grammar
> is not an expression'.
> 
> Is that about right?
Yes, you have it.
-- Eric Niebler Boost Consulting www.boost-consulting.com