#pragma once #include #include #include "SimpleGrammar.hpp" #include "TriggerGrammar.hpp" namespace ovdl::v2script::grammar { constexpr auto modifier_keyword = LEXY_KEYWORD("modifier", lexy::dsl::inline_>); constexpr auto factor_keyword = LEXY_KEYWORD("factor", lexy::dsl::inline_>); struct FactorStatement { static constexpr auto rule = factor_keyword >> lexy::dsl::equal_sign + lexy::dsl::inline_>; static constexpr auto value = lexy::as_string | lexy::new_; }; struct ModifierStatement { static constexpr auto rule = modifier_keyword >> lexy::dsl::curly_bracketed.list( lexy::dsl::p | lexy::dsl::p); static constexpr auto value = lexy::as_list> >> lexy::callback( [](auto&& list) { return ast::make_node_ptr(LEXY_MOV(list)); }); }; }