mirror of
https://github.com/yhirose/cpp-peglib.git
synced 2024-12-22 11:55:30 +00:00
Merge pull request #117 from peoro/master
Fix support to custom AST node types
This commit is contained in:
commit
8e890ced7f
2
peglib.h
2
peglib.h
@ -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…
Reference in New Issue
Block a user