Hi Yves, (sorry Mr. Orton)

> > > salutation : /Mrs?/ first_name last_name
> > > first_name : /(?!Mrs?)\S+/
> > > last_name  : /\S+/
> > >
> > > Or using lookahead matches
> > >
> > > salutation : 'Mr' ...!'Mrs'
> > >            | 'Mrs' ...!'Mr'
> >
> > but this works only for terminals
> 
> No, using lookahead matches applies to nonterminals as well.  But you're
> (sortof) correct about the regex solutions.

sure, I was speaking about the regex solution not the lookahead

> 
> >and this is again not what
> > I need. I've choosen Mr and Mrs as subrule names just for an easy
> > demonstration what is needed, but in general this is necessary
> > for subrules:
> >
> > exor    : subrule-1 ^ subrule-2 ^ subrule-3
> > subrule-1: subrule-11 ^ subrule-12 ....
> 
> Umm, ok now maybe im confused, but I would go with Marco on this.  This is
> exactly the same as
> 
> option  : optlist
> optlist : rule1 | rule2 | rule3
> rule1   : subrule1 | subrule 2
> 
> Optlist may now only match 1 of rule1 rule2 or rule3, and likewise if it
> does match rule1 it may only be subrule1 or subrule2.
> 
> I believe the impact of changing the above to
> 
> option  : optlist(s)
> optlist : rule1 | rule2 | rule3
> rule1   : subrule1 | subrule 2
> 
> which allows any selection of the rule1 is causing you problems.  It is the
> rule option that allows multple optlist elements to be chosen, not optlist
> itself.

no, you didn't really catch my problem. I'll try it again:

option : optlist(s)
optlist: ip | pw 
ip     : 'ipaddr' '=' value
pw     : 'passw'  '=' value
value  : /".*?"/

then the input:
ipaddr = "10.0.0.1";
passw  = "private";

or

ipaddr = "10.0.0.1";

or

passw = "private";

should succeed but not

ipaddr = "10.0.0.1";
passw  = "private";
ipaddr = "192.168.10.1"

and I see no chance to do this without {action code}.
It could be done with:

option : optlist(s)
optlist: ip ^ pw 
ip     : 'ipaddr' '=' value
pw     : 'passw'  '=' value
value  : /".*?"/

that means any of the options ip or pw but not any option more than
one time. The wish is not so strange, you will stumble over it when
you try for example to write a parser for named or dhcp cfg files,
and of course in my config files for network management.

regards
        Charly

-- 
Karl Gaissmaier          Computing Center,University of Ulm,Germany
Email:[EMAIL PROTECTED]          Network Administration
Tel.: ++49 731 50-22499

Reply via email to