//+------------------------------------------------------------------+ //| Def.mqh | //| Copyright 2026, Niquel Mendoza. | //| https://www.mql5.com/es/users/nique_372 | //+------------------------------------------------------------------+ #property copyright "Copyright 2026, Niquel Mendoza." #property link "https://www.mql5.com/es/users/nique_372" #property strict #ifndef EXPRESSEVALBYLEO_SRC_COMMON_DEF_MQH #define EXPRESSEVALBYLEO_SRC_COMMON_DEF_MQH //--- Necesitamos activar la tabla de hex asi que definimos esto.. #ifndef MQLARTICLES_ACTIVE_VALID_VALUES_HEX_ARRAY #define MQLARTICLES_ACTIVE_VALID_VALUES_HEX_ARRAY #endif // MQLARTICLES_ACTIVE_VALID_VALUES_HEX_ARRAY //--- Neceistamos los tipos custom double\int etc #ifndef MQLARTICLES_ENUMREG_ENUM_DATATYPE_CUSTOM #define MQLARTICLES_ENUMREG_ENUM_DATATYPE_CUSTOM #endif // MQLARTICLES_ENUMREG_ENUM_DATATYPE_CUSTOM //+------------------------------------------------------------------+ //| Include | //+------------------------------------------------------------------+ #include #include //+------------------------------------------------------------------+ //| Defines \ Enums | //+------------------------------------------------------------------+ //--- Start bit para extra type para type #define AST_LOGIC_EXTRA_TYPE_START_BIT (16) //--- Start bit para tipo de error #define AST_LOGIC_ERR_TYPE_START_BIT (24) //--- #define AST_LOGIC_ERR_TYPE_EXTERNAL (1) //--- Tipos #define AST_LOGIC_NUMBER_DOUBLE (0) #define AST_LOGIC_NUMBER_INTEGER (1) //--- Tipos de errores genericos enum ENUM_GENERIC_ERR_PARSE { GENERIC_ERR_PARSE_STRING_RAW_INICIO_NO_FOUND_EN_CUSTOM = 0, GENERIC_ERR_PARSE_STRING_RAW_SUPERO_EL_LEN, GENERIC_ERR_PARSE_STRING_RAW_NO_CERRADO, GENERIC_ERR_PARSE_DBL_TIENE_MAS_DE_DOS_PUNTOS, GENERIC_ERR_PARSE_DBL_TIENE_MAS_DE_DOS_MENOS, GENERIC_ERR_PARSE_NUMERO_INVALIDO, GENERIC_ERR_PARSE_NUMERO_MAL_FORMADO, GENERIC_ERR_PARSE_NUMERO_HEX_INVALIDO, GENERIC_ERR_PARSE_STRING_NO_CERRADO, GENERIC_ERR_PARSE_STRING_MALFORMADO_ACABA_CON_SLASH, GENERIC_ERR_PARSE_SE_ESPERABA_UN_FIN_DE_FUNCION, GENERIC_ERR_PARSE_SE_ESPERABA_UN_INICIO_DE_FUNCION }; //--- Separador general para el parser #define OPS_TOKENIZER_CHAR_SEP ("│") //--- #define AST_OPS_CHECK_RESIZE \ current_size++; \ if(current_size >= reserve_size) \ { \ reserve_size <<= 1; \ ArrayResize(tokns, reserve_size, reserve_size); \ } //--- //--- Tipo de nodo valor enum ENUM_AST_NODE_TYPE { AST_EXPVAL_NODE_TYPE_VARIABLE = 0, AST_EXPVAL_NODE_TYPE_FUNCTION, AST_EXPVAL_NODE_TYPE_CAST_PRODUCT, AST_EXPVAL_NODE_TYPE_BINRAY_NODE }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ struct CTokenizerBase { protected: int m_len; int m_pos; int m_err_pos; public: CTokenizerBase(void) : m_len(0), m_pos(0), m_err_pos(0) {} // ~CTokenizerBase(void) {} //--- int LastErrorPos() const { return m_err_pos; } void GetCharPosLocation(const int char_pos, const string& text, int& col, int& line) const; }; //+------------------------------------------------------------------+ void CTokenizerBase::GetCharPosLocation(const int char_pos, const string& text, int &col, int &line) const { col = 1; line = 1; for(int i = 0; i <= char_pos && i < m_len; i++) { if(text[i] == '\n') { line++; col = 1; } else col++; } } //+------------------------------------------------------------------+ #endif // EXPRESSEVALBYLEO_SRC_COMMON_DEF_MQH