$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Eric Niebler (eric_at_[hidden])
Date: 2008-03-04 12:38:07
Larry Evans wrote:
> On 03/03/08 19:29, Eric Niebler wrote:
>  > Larry Evans wrote:
>  >>      If T0,T1,...,Tn are all expression types, and Tag is an n-ary tag,
>  >>      then expr<Tag,T0,T,...,Tn> is an expression type.
>  >
>  > Yes. It is also a grammar type that matches itself.
>  >
> [snip]
> Hmm...  So a grammar is an expression and an expression is a grammar.
> Sorta like lisp where a program is data and data is a program.
> I guess proto::matches is like lisp eval.  Is that sorta right?
An expression is a grammar, but a grammar is not an expression. For 
example, not_<X> is only a grammar and not an expression.
There's a similarity between lisp macros and proto transforms. They both 
operate on executable code in the form of expression trees. We haven't 
spoken about transforms yet, but just as there is a relation between 
expressions and grammars, there's also a relation between grammars and 
transforms. I certainly feel like there needs to be a section in Proto's 
docs that calls out these relationships explicitly.
-- Eric Niebler Boost Consulting www.boost-consulting.com