Coincidentally, I gave a presentation on this paper earlier this
morning for a class of mine, as well as writing a report on it. You
can find both attached. I have been meaning to look into this for
adding left recursion support to PEGs.

Personally, I find the presentation better structured as I wrote it
yesterday after having stewed on the ideas from the paper (and
my report on it) for a week or two.

You can find both here:
http://ioreader.com/media/memo-parser-presentation.pdf
http://ioreader.com/media/memo-parser-report.pdf

Let me know if those clear up any of the ideas.

Best Regards,

Peter Goodman,
http://ioreader.com
70 Winston Circle,
Montreal, Quebec
H9S 4X6



On Sat, Nov 27, 2010 at 8:35 AM, Andrew Lentvorski <bs...@allcaps.org> wrote:
> I've been trying to work my way through Mark Johnson's "Memoization in Top
> Down Parsing" paper.  I've been trying to work through the continuation
> passing style parts, but I just can't seem to figure out what is wrong with
> the alt operator.
>
> I expect (FOOORBAR identity '(foo bar baz)) to return '(bar baz) for
> consistency with the rest of the code, but all I'm getting is an empty list.
>
> What am I missing?  Do I have to bottom out in something like a "future"
> rather than identity and only fully-evaluate when I return?  Is it as simple
> as I'm missing a "union" in the function (but, I don't necessarily expect
> that a continuation should allow things to come back so that seems like it
> would be useless)?
>
> I suspect that I really need to understand this *well* before I try
> memoizing the continuations for left-recursion evaluation.
>
> Thanks,
> -a
>
> This is the code I used:
>
> (define (identity args)
>  args)
>
> (define (terminal word)
>  (lambda (continuation pos)
>    (if (and (pair? pos) (eq? (car pos) word))
>      (continuation (cdr pos))
>      (continuation '()))))
>
> (define (seq seq1 seq2)
>  (lambda (continuation pos)
>    (seq1 (lambda (pos1) (seq2 continuation pos1))
>          pos)))
>
> (define (alt alt1 alt2)
>  (lambda (continuation pos)
>    (begin (alt1 continuation pos)
>           (alt2 continuation pos))))
>
> (define FOO (terminal 'foo))
> (define BAR (terminal 'bar))
> (define FOOANDBAR (seq FOO BAR))
> (define FOOORBAR (alt FOO BAR))
>
>> (FOO identity '(foo bar baz))
> '(bar baz)
>> (BAR identity '(foo bar baz))
> '()
>> (FOOANDBAR identity '(foo bar baz))
> '(baz)
>> (FOOANDBAR identity '(bar baz foo))
> '()
>> (FOOORBAR identity '(foo bar baz))
> '() ; <-- Not what I expected
>
> _______________________________________________
> PEG mailing list
> PEG@lists.csail.mit.edu
> https://lists.csail.mit.edu/mailman/listinfo/peg
>

_______________________________________________
PEG mailing list
PEG@lists.csail.mit.edu
https://lists.csail.mit.edu/mailman/listinfo/peg

Reply via email to