John,

On May 19, 2007, at 9:06 AM, John Leuner wrote:

I haven't implemented the full PEG grammar and haven't paid any
attention to efficiency (eg there is no memoization of parse results).

I'd be very interested to hear of your experiences if/when you try to add memoization.

It's probably just my ineptitude at optimisation but when implementing the peg/leg parser generators for C, every single optimisation I tried to incorporate ended up slowing down the generated parsers. I paid some attention to making the input buffer, backup, and the paths through conditionals as efficient as possible. After that I think it came down to the speed at which I could match strings and character classes.

I fed a C99 grammar (copied from the standard, with left-recursion rewritten) through 'leg' and then pointed the generated parser at a huge pile of C source; it parsed about 3 megabytes (4600+ function definitions and external declarations, 95000 lines of code) per second, with no optimisations whatsoever. (2.16 GHz Core 1 Duo running Darwin.) The 'basic' example (included in the 'peg' source) interprets Tiny BASIC by (re-)parsing every line as source as it executes, putting the execution machinery in semantic actions, and it manages over 1/2 million lines per second (same hardware as above).

Roman Redziejowski wrote a paper (linked from Bryan's packrat page) about backtracking with little or no optimisation that I am tempted to read for possible insights into my 'degrading experiences' with optimisations.

Cheers,
Ian




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

Reply via email to