#pragma once #include "libsyntax.h" #include namespace lib_composit { template class __types_list; template<> class __types_list<> { public: static QList> getRules() { return QList>(); } }; template requires std::derived_from class __types_list : public __types_list { public: static QList> getRules() { auto list = __types_list::getRules(); list.prepend(std::make_shared()); return list; } }; template class Any : public lib_syntax::__anyone_impl, public __types_list { public: Any() : __anyone_impl(__types_list::getRules()) { } }; template class Seqs : public lib_syntax::__sequence_impl, public __types_list { public: Seqs() : __sequence_impl(__types_list::getRules()) { } }; template requires std::derived_from class Rept : public lib_syntax::__repeat_impl { public: Rept() : __repeat_impl(std::make_shared(), min, max) { } }; template class OptMulti : public Rept { }; template class Multi : public Rept { }; template class Opt : public Rept { }; template p = nullptr> requires std::derived_from&& std::derived_from class Action : public lib_syntax::__token_match_impl { public: Action() : __token_match_impl(std::make_shared()) { } }; template requires std::derived_from void apntk(std::shared_ptr expr, std::shared_ptr t) { expr->addToken(t); } template requires std::derived_from class Match : public Action> { }; }