diff --git a/peglib.h b/peglib.h index 27f4574..1bc1217 100644 --- a/peglib.h +++ b/peglib.h @@ -2374,6 +2374,9 @@ inline void DetectLeftRecursion::visit(Reference& ope) { refs_.insert(ope.name_); if (ope.rule_) { ope.rule_->accept(*this); + if (done_ == false) { + return; + } } } done_ = true; diff --git a/test/test.cc b/test/test.cc index 6f381c0..ac2c7af 100644 --- a/test/test.cc +++ b/test/test.cc @@ -1032,6 +1032,17 @@ TEST_CASE("Left recursive with zom test", "[left recursive]") REQUIRE(!parser); } +TEST_CASE("Left recursive with a ZOM content rule", "[left recursive]") +{ + parser parser(R"( + A <- B + B <- _ A + _ <- ' '* # Zero or more + )"); + + REQUIRE(!parser); +} + TEST_CASE("Left recursive with empty string test", "[left recursive]") { parser parser(