A parser combinator example... (the correct file)

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


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

Hello!


I just realized that for the combinator parser example I sent it
had attached the wrong file - so here is the .tar.gz file I meant
to send (but also see my next mail) - and the description again:

Unpack and:

cd HardcoreProcessing/
mlton sources.cm

What happens in the real program is that it first prints:

A, s, t, e, r, o, i, d, 5,

which is the characters it meets during parsing.
Then it prints:

A, s, t, e, r, o, i, d, 5, 5,

which is the list of characters returned from the repeat
parser combinator (which does some tricky stuff with recursion and
exception handling to avoid generating a huge exception
stack during recursion).

The output is OK when running this small example alone - but
it fails in a larger program. I hope that you might be able
to find the bug somehow. I should note that my program used
to work with MLton (the earlier versions) - and I just tested
the real program with SML/NJ and it still works fine here.

It could be some vety very sticky issues with buffering in BinIO - but
then I'm quite sure that it's not part of what I modified in BinIO :)
(but it could be that it just accidentally triggered a bug in, say, my
FuncBinIO module or something...)


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

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
ByXGH6UAGAEA
--------------F93D1DC6445C31ED74278242--