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!"
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.
I parsed my language with it, it's fast and works well.
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.
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!"
You have an odd notion of "explicit". There's no need to be coy ... spell it out.
What “other catastrophes”? Are you being deliberately mysterious?