Bugfix for left recursion

This commit is contained in:
Bruce Hill 2022-05-02 17:23:02 -04:00
parent 892708a651
commit e071ac7b12
4 changed files with 6 additions and 0 deletions

View File

@ -667,7 +667,9 @@ static match_t *match(match_ctx_t *ctx, const char *str, pat_t *pat)
while (1) {
const char *prev = m->end;
rec_op.args.leftrec.match = m;
ctx2.cache = &(cache_t){0};
match_t *m2 = match(&ctx2, str, ref);
cache_destroy(&ctx2);
if (!m2) break;
if (m2->end <= prev) {
recycle_match(&m2);

View File

@ -0,0 +1 @@
f!!!

View File

@ -0,0 +1 @@
{f!!!}

View File

@ -0,0 +1,2 @@
# Left recursion has some tricky edge cases like this:
bp -p 'shout: phrase `!; phrase: shout / id; phrase => "{@0}"'