
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