Fix support to custom AST node types

Fixes #116
pull/117/head
peoro 4 years ago
parent c49366ad07
commit ad1a6d27da
  1. 2
      peglib.h
  2. 18
      test/test1.cc

@ -3937,7 +3937,7 @@ public:
template <typename T = Ast> parser &enable_ast() {
for (auto &x : *grammar_) {
auto &rule = x.second;
if (!rule.action) { add_ast_action(rule); }
if (!rule.action) { add_ast_action<T>(rule); }
}
return *this;
}

@ -387,6 +387,24 @@ TEST_CASE("Skip token test2", "[general]")
REQUIRE(ret == true);
}
TEST_CASE("Custom AST test", "[general]")
{
struct CustomType {};
using CustomAst = AstBase<CustomType>;
parser parser(R"(
ROOT <- _ TEXT*
TEXT <- [a-zA-Z]+ _
_ <- [ \t\r\n]*
)");
parser.enable_ast<CustomAst>();
std::shared_ptr<CustomAst> ast;
bool ret = parser.parse("a b c", ast);
REQUIRE(ret == true);
REQUIRE(ast->nodes.size() == 4);
}
TEST_CASE("Backtracking test", "[general]")
{
parser parser(R"(

Loading…
Cancel
Save