[mercury-users] Re: Lisp-like syntax for Mercury (Mercury & macros)

Peter Schachte schachte at cs.mu.OZ.AU
Wed Jun 12 11:15:21 AEST 2002

On Tue, Jun 11, 2002 at 05:08:38PM +1200, Richard A. O'Keefe wrote:
> When backslash escapes were added to QP, unescaped newlines in strings
> are forbidden.  That means you only have to worry about single quotes
> on the current line.

Unfortunately, character_escapes must be explicitly enabled, and in
general there's no way to tell by looking at it if a file is meant to
be compiled with character escapes on or off.  It's also rather a
nuissance, and error prone to boot, to turn on character escapes for
a single file.  It's unfortunate that character escapes weren't made
an always on feature, with the prohibition on unescaped newlines.

> But the real secret is "in order to move backwards, tokenise FORWARDS".

Of course, this isn't easy in a text editor.  You pretty much have to
rely on the rule that all and only clause heads begin in column 1.
Except for % comment lines.  And there is a performance hit involved
in finding the beginning of the clause and tokenizing it forward to
the current location every time you do anything.

> Newline at same indentation: <LF>.
> Increase indentation: <ESC><Ctrl-I>
> Decrease indentation: <ESC><Ctrl-U>
> Given these keys, I find getting the indentation right manually
> is practically effortless

You are still forced to think about your program as text.  I'd rather
think about it as predicates and terms.  Only the comments are text.

> 	> However, '.' followed by white space is
> 	> end of clause, '.' followed by anything else isn't.
> 	Not true:
> 		  X =  0'.
> 		, Y = '0'.
> 	is a single Prolog term, not two.
> Remember, the trick is to parse FORWARDS.

My point was that "." followed by whitespace does not necessarily end
a clause, and telling whether it does or not is difficult.  In fact,
because of character escapes, it's not in general possible to tell
just by looking at the file.

Peter Schachte              As the mainstream media has become increasingly
schachte at cs.mu.OZ.AU        dependent on advertising revenues for support,
www.cs.mu.oz.au/~schachte/  it has become an anti-democratic force in
Phone: +61 3 8344 9166      society. -- Robert McChesney 
mercury-users mailing list
post:  mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-users-request at cs.mu.oz.au Message: subscribe

More information about the users mailing list