$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Larry Evans (cppljevans_at_[hidden])
Date: 2008-03-24 17:22:30
On 03/24/08 15:16, Eric Niebler wrote:
 > Larry Evans wrote:
 >> sort of succinct formula.  My last attempt was:
 >>
 >>    http://archives.free.net.ph/message/20080324.160640.f8aed314.en.html
 >
 >
 > I confess I don't understand your notation in that message.
The notation is supposed to be a language grammar similar to that
shown in compiler texts, except it doesn't surround the grammar
terminals with quotes.  So, to make it closer to that, use:
expr_type
   = 'terminal::type'     //rule0
   | (expr_type+)'::type' //rule1
   ;
and where the postfix + means 1 or more of the preceding.  So, one
possible instance of sentence satisfying this grammar is (tracing the
derivations and subscripting different instances of grammar symbols with
_i, where i is an positive integer, and showing the derivations steps
with -(ruleX->, where ruleX is one of the comments labelling
the grammar altenatives in the above equattion):
expr_type
   -rule1-> (expr_type_1, expr_type_2, expr_type_3)'::type'
   -rule0-> ('terminal::type'_1 'terminal::type'_2 
'terminal::type'_3)'::type'
Now, the terminal symbol, 'terminal::type' is supposed to represent
any proto::terminal<> grammar and the appending '::type' is supposed
to represent the conversion of the proto::grammar to the corresponding
expression. The (expr_type+) is supposed to represent any other
proto "expression" grammar.  The reason expr<Tag,expr_type+,Size> was
not used was because that's just the concrete syntax version of
expr_type+; hence, just detail.  A concrete instance of this would be:
   shift_right<terminal<int>::type,terminal<char>::type>::type
where the concrete symbols corresponding to the last step in the example
abstract derivation above are:
   'terminal::type'_1
     == terminal<int>::type
   'terminal:;type'_2
     == terminal<char>::type
   'terminal::type'_3
     == //none because shift_right is binary
   ('terminal::type'_1 'terminal::type'_2)'::type'
     == shift_right<terminal<int>,terminal<char>::type>::type
 > I also don't
 > understand what you're trying to get at with morphisms, a concept I
 > don't grasp. Do you think you could try again to explain what you're
 > trying to achieve?
 >
Before I try that, I better make sure the above is clear enough.
Could you let me know if it's not clear.