Fix support to custom AST node types

Fixes #116
This commit is contained in:
peoro 2020-06-18 16:17:27 +02:00
parent c49366ad07
commit ad1a6d27da
2 changed files with 19 additions and 1 deletions

View File

@ -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;
}

View File

@ -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"(