Peter Cashin wrote:
One nagging worry: my working definition of a deterministic
grammar/parse is that there can only be one match for any rule from
any given position... which fits with PEG and pack-rat memos.. but
left recursion breaks this definition... Any suggestions?
No, left recursion doesn't break it but I can see how you might think that.
Here's an example.
E <- E '+' V
/ V
V <- 'a'
E is left recursive so we break it into left and non-left parts.
E <- E_nonleft E_left* # This is the looping part
E_nonleft <- V
E_left <- left_hand_side '+' V # left_hand_side given as argument
Obviously, E and E_nonleft can only give one match per position.
What I might have glossed over is that, the results of E_left are being
memoized at the position they were evaluated at. This is different to
how Jeremy was doing it which was to memoize everything at the position
of the original E.
So, each of E, E_nonleft and E_left will only be evaluated a maximum of
n times and will always give the same result. It's an implementation
detail as to whether you think of E_left as joining its left hand side
with its other results or whether that is done by E or whatever
indirectly recursive part may have called it.
Orlando.
_______________________________________________
PEG mailing list
PEG@lists.csail.mit.edu
https://lists.csail.mit.edu/mailman/listinfo/peg