[m-dev.] '|' as an operator
Fergus Henderson
fjh at cs.mu.OZ.AU
Tue Feb 11 14:31:58 AEDT 2003
On 11-Feb-2003, David Overton <dmo at cs.mu.OZ.AU> wrote:
> We have been using `|' as an operator in HAL using the SICstus reader
> (which treats it the same as `;', except in lists). Now that the HAL
> compiler is compiling to Mercury, we are using lexer.m from the Mercury
> library instead. Unfortunately, lexer.m treats `|' as a special token
> `ht_sep' so it is not possible to define it as an operator.
The reason lexer.m treats `|' as a special token is because that is
what ISO Prolog specifies.
> It would seem to me that `|' only needs to be treated as a special token
> when we are inside a [ ... ] construct. My plan is to change lexer.m so
> that `|' produces the token `name("|")' and then changing parser.m to
> use `name("|")' instead of `ht_sep' when parsing lists. This would then
> allow `|' to also be defined as an operator.
>
> Can anyone see any problem with this?
Well, if `|' is defined as an operator with priority =< arg_priority, then
there would be no way to use `|' in list syntax -- the parser would always
prefer to parse it as an operator. Furthermore, in Mercury currently
arg_priority is 1201, i.e. *all* operators have priority =< arg_priority.
--
Fergus Henderson <fjh at cs.mu.oz.au> | "I have always known that the pursuit
The University of Melbourne | of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh> | -- the last words of T. S. Garp.
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to: mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions: mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------
More information about the developers
mailing list