#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 AnyR : public lib_syntax::Any, public __types_list { public: AnyR() : Any(__types_list::getRules()){ } }; template class SeqsR : public lib_syntax::Seqs, public __types_list { public: SeqsR() : Seqs(__types_list::getRules()){ } }; template requires std::derived_from class ReptR : public lib_syntax::Rept { public: ReptR() : Rept(std::make_shared(), min, max){ } }; template class OptMulti : public ReptR{ }; template class Multi : public ReptR{ }; template class Opt : public ReptR{ }; template p = nullptr> requires std::derived_from && std::derived_from class TokenR : public lib_syntax::TokenMatch { public: TokenR() : TokenMatch(std::make_shared()){ } }; }