Apologies for butting in where my opinion is not asked for, but ...
> statement: A! | B! | C | D
>
> is so easy to understand: At least A and B, optionally C and/or D
> but without ORDER, in comparison to action codes and greps and maps
> and line noise.
At what point does "A!" become mandatory? In the
block: statement(s) /* A or B must be part of block */
construct? Or in the
program: block(s) /* A or B must be part of program */
block: statement(s)
construct? There are times whem both forms are useful -- but defining
"mandatory" as part of the syntax for the singular "statement"
construct is limitting.
Also, what if the programmer wants a more complicated logical function
on the set of statements that comprises a "minimal" block?
It seems to me, P:RD already has the functionality you desire, in a
much more flexible form. What's wrong with:
statement: A | B | C | D
block: "{" statements(s) "}"
{
/* some code to test for the presense of A and B,
else return undef */
}
I'd hate to see P:RD fall into same trap as regexps: P:RD doesn't need
to be a complete programming language. P:RD is fine as a perl
accessory.
jm.