2nd combinator parser example

Anoq of the Sun anoq@HardcoreProcessing.com
Thu, 28 Mar 2002 23:31:52 +0100


This is a multi-part message in MIME format.
--------------26D0D754EA053171BEE7E84E
Content-Type: text/plain; charset=iso-8859-7
Content-Transfer-Encoding: 7bit

Hello again!


OK - here is a better example of a combinator parser.
This one is a text-file parser rather than a binary
parser (so you should even be able to test it with
your current mlton without my changes...). And this time
the error actually occurs in the example exactly as it does
in my larger program! :)

Unpack with gzip and tar and then:

cd HardcoreProcessing/
mlton sources.cm

This example creates a text-file with the contents:

structure MyStruct = struct end

The program is supposed to parse this and print the name of the
structure: MyStruct - and indeed this happens on SML/NJ.

But what happens on MLton is that I get a "parse error" (in the
example - not from MLton...) saying:

Expected token structure not found! Found structuree instead.

So again the repeat combinator seems to be returning 2 "e"s at
the end of the list of characters where it should really
only read one.

I hope it makes it considerably easier to find the bug with an
example which really triggers it :)


Cheers
-- 
http://www.HardcoreProcessing.com
--------------26D0D754EA053171BEE7E84E
Content-Type: application/x-gzip;
 name="RepeatParserCombinator2.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="RepeatParserCombinator2.tar.gz"

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
r1ov9LUseF988cUXX3zxxZdvvPwOQevmNgAYAQA=
--------------26D0D754EA053171BEE7E84E--