Neat. If you add some automatic memoization, I'll use it for my next project!
Here's the use case:
expr := ...
rule1 := expr foo expr
rule2 := expr bar
When trying to match rule1 and failing, it is great to have the expr part of it already parsed and ready for trying out rule2.
This doesn't have to be done extremely well (see PEG/Packrat parsing for that) but even a little bit, maybe one term or something like that helps a lot.
This appears to avoid one of the classic bugs with parser combinators (expensive backtracking and/or memory-use), but appears not to fix one of the other catastrophes.
To be explicit: one of the "features" this advertises is equivalent to saying "if you stop compiling your code with `-Wall`, you don't have to deal with all those pesky warnings!"
Here's the use case:
expr := ...
rule1 := expr foo expr
rule2 := expr bar
When trying to match rule1 and failing, it is great to have the expr part of it already parsed and ready for trying out rule2.
This doesn't have to be done extremely well (see PEG/Packrat parsing for that) but even a little bit, maybe one term or something like that helps a lot.
Pressing rules are written in c++ directly, with templates.
Although if you have no experience in parsing, the learning curve could be a bit steep.
To be explicit: one of the "features" this advertises is equivalent to saying "if you stop compiling your code with `-Wall`, you don't have to deal with all those pesky warnings!"