[m-users.] parsing, seeking advice on simple combinator project and also operators.
    Volker Wysk 
    post at volker-wysk.de
       
    Sun Oct 30 04:53:42 AEDT 2022
    
    
  
Hi
Here's a parser combinator for you, using DCG syntax:
:- pred repeatmax0(pred(T, list(char), list(char)), 
                   list(T), 
                   list(char), list(char)).
:- mode repeatmax0(pred(out, in, out) is det,     out, in, out) is det.
:- mode repeatmax0(pred(out, in, out) is semidet, out, in, out) is det.
:- mode repeatmax0(pred(out, in, out) is multi,   out, in, out) is multi.
:- mode repeatmax0(pred(out, in, out) is nondet,  out, in, out) is nondet.
repeatmax0(Pars, Values) -->
    ( if   Pars(Val)
      then { Values = [Val|Vals] },
           repeatmax0(Pars, Vals)
      else { Values = [] }
    ).
It repeats applying a parser (Pars) as often as possible and collects the
results in a list (Values).
Bye
Volker
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <http://lists.mercurylang.org/archives/users/attachments/20221029/f4ecc258/attachment.sig>
    
    
More information about the users
mailing list