#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 TAct : public lib_syntax::TokenMatch { public: TAct() : TokenMatch(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 TMatch : public TAct> { }; }