This commit is contained in:
codeboss 2025-02-12 10:13:35 +08:00
parent 805169bad1
commit 4c1e698b14
4 changed files with 17 additions and 19 deletions

View File

@ -178,7 +178,7 @@ namespace lib_syntax {
/**
* @brief token匹配
*/
template<typename ELEM, lib_token::TokenProcs<ELEM> XProc = nullptr>
template<typename ELEM, lib_token::TokenProc<ELEM> XProc = nullptr>
requires std::derived_from<ELEM, ast_basic::IExprInstance>
class TokenMatch : public IBasicRule, public std::enable_shared_from_this<TokenMatch<ELEM, XProc>> {
private:

View File

@ -253,7 +253,7 @@ class MM : public lib_syntax::IBasicRule {
#include "syntax_templets.h"
std::shared_ptr<const ExprRule> NovalSyntax::getSyntaxTree() {
lib_composit::TypeList<MM, MM> vv;
lib_composit::__types_list<MM, MM> vv;
return std::make_shared<DocumentSyntax>();
}

View File

@ -4,9 +4,9 @@
#include <concepts>
namespace lib_composit {
template<typename... TYPES> class TypeList;
template<typename... TYPES> class __types_list;
template<> class TypeList<> {
template<> class __types_list<> {
public:
static QList<std::shared_ptr<const lib_syntax::IBasicRule>> getRules() {
return QList<std::shared_ptr<const lib_syntax::IBasicRule>>();
@ -15,25 +15,25 @@ namespace lib_composit {
template<typename T, typename... Rets>
requires std::derived_from<T, lib_syntax::IBasicRule>
class TypeList<T, Rets...> : public TypeList<Rets...> {
class __types_list<T, Rets...> : public __types_list<Rets...> {
public:
static QList<std::shared_ptr<const lib_syntax::IBasicRule>> getRules() {
auto list = TypeList<Rets...>::getRules();
auto list = __types_list<Rets...>::getRules();
list.prepend(std::make_shared<const T>());
return list;
}
};
template<typename... TYPES>
class AnyR : public lib_syntax::Any, public TypeList<TYPES...> {
class AnyR : public lib_syntax::Any, public __types_list<TYPES...> {
public:
AnyR() : Any(TypeList<TYPES...>::getRules()){ }
AnyR() : Any(__types_list<TYPES...>::getRules()){ }
};
template<typename... TYPES>
class SeqsR : public lib_syntax::Seqs, public TypeList<TYPES...> {
class SeqsR : public lib_syntax::Seqs, public __types_list<TYPES...> {
public:
SeqsR() : Seqs(TypeList<TYPES...>::getRules()){ }
SeqsR() : Seqs(__types_list<TYPES...>::getRules()){ }
};
template<typename TYPE, int min, int max>
@ -42,7 +42,7 @@ namespace lib_composit {
ReptR() : Rept(std::make_shared<TYPE>(), min, max){ }
};
template<typename E, typename T, lib_token::TokenProcs<E> xproc = nullptr>
template<typename E, typename T, lib_token::TokenProc<E> xproc = nullptr>
requires std::derived_from<E, ast_basic::IExprInstance> && std::derived_from<T, lib_token::ITokenProcess>
class TokenR : public lib_syntax::TokenMatch<E, xproc> {
public:

View File

@ -5,8 +5,8 @@
namespace lib_token {
template<typename ExprT>
using TokenProcs = void(*)(std::shared_ptr<ExprT> expr, std::shared_ptr<const lib_token::IToken> t);
template<typename ExprT> requires std::derived_from<ExprT, ast_basic::IExprInstance>
using TokenProc = void(*)(std::shared_ptr<ExprT> expr, std::shared_ptr<const lib_token::IToken> t);
// 基础token实现 ===================================================
@ -48,7 +48,7 @@ namespace lib_token {
/**
* @brief Token
*/
template<typename ExprT, TokenProcs<ExprT> proc>
template<typename ExprT, TokenProc<ExprT> p> requires std::derived_from<ExprT, ast_basic::IExprInstance>
class ActionToken : public IActionToken {
private:
std::shared_ptr<const IToken> _bind_content;
@ -60,7 +60,7 @@ namespace lib_token {
virtual std::shared_ptr<ast_basic::IExprInstance> makeSure(std::shared_ptr<ast_basic::IExprInstance> expr) {
auto expr_inst = std::dynamic_pointer_cast<ExprT>(expr);
proc(expr_inst, shared_from_this());
p(expr_inst, shared_from_this());
return expr;
}
@ -91,8 +91,7 @@ namespace lib_token {
/**
* @brief token
*/
template<typename NExpr>
requires std::derived_from<NExpr, ast_basic::IExprInstance>
template<typename NExpr> requires std::derived_from<NExpr, ast_basic::IExprInstance>
class ExprBeginToken : public IActionToken {
private:
std::shared_ptr<const IActionToken> _prev_token = nullptr;
@ -149,8 +148,7 @@ namespace lib_token {
/**
* @brief token
*/
template<typename ExprT>
requires std::derived_from<ExprT, ast_basic::IExprInstance>
template<typename ExprT> requires std::derived_from<ExprT, ast_basic::IExprInstance>
class ExprEndToken : public IActionToken {
private:
std::shared_ptr<const IActionToken> _prev_token = nullptr;