ExpressEvalByLeo/Src/MathEval/Defines.mqh
Nique_372 68d060365e
2026-05-14 16:54:23 -05:00

105 lines
3.3 KiB
MQL4

//+------------------------------------------------------------------+
//| Defines.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_MATHEVAL_DEFINES_MQH
#define EXPRESSEVALBYLEO_SRC_MATHEVAL_DEFINES_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "..\\Common\\GenericParser.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//--- Tipos de tokens para math
enum ENUM_AST_TOKEN_MATH_TYPE
{
AST_TOKEN_MATH_T_VALUE_NUMBER = 0,
AST_TOKEN_MATH_T_VALUE_VARIABLE,
AST_TOKEN_MATH_T_VALUE_FUNCTION_BUIL_IN_CALL,
AST_TOKEN_MATH_T_VALUE_FUNCTION_CUSTOM_CALL,
AST_TOKEN_MATH_T_VALUE_OPERDOR_MATEMATICO,
AST_TOKEN_MATH_T_VALUE_OPERDOR_PARA_INI,
AST_TOKEN_MATH_T_VALUE_OPERDOR_PARA_END
};
//--- Token base para math
struct TokenMathExp
{
string vs; // string value
BitInterpreter v; // valor numerico
int type; // Tipo
};
//--- Operadores matemtaticos
enum ENUM_BINARY_NODE_OPERATOR
{
BINARY_NODE_OP_BIT_OR = 0,
BINARY_NODE_OP_BIT_XOR,
BINARY_NODE_OP_BIT_AND,
BINARY_NODE_OP_BIT_DEZPLAZAMIENTO_DRC,
BINARY_NODE_OP_BIT_DEZPLAZAMIENTO_IZQ,
BINARY_NODE_OP_RESTA,
BINARY_NODE_OP_SUMA,
BINARY_NODE_OP_MODULO,
BINARY_NODE_OP_DIVICION,
BINARY_NODE_OP_MUL,
};
//--- Errores del tokinizador de math
enum ENUM_BINARY_AST_MATH_ERR
{
BINARY_AST_TOKENIZER_ERR_DEZ_IZQ_INVALIDO = 0,
BINARY_AST_TOKENIZER_ERR_DEZ_IZQ_SE_ESPERABA_EL_SIG_FALTANTE,
BINARY_AST_TOKENIZER_ERR_DEZ_DRC_INVALIDO,
BINARY_AST_TOKENIZER_ERR_DEZ_DRC_SE_ESPERABA_EL_SIG_FALTANTE,
BINARY_AST_TOKENIZER_ERR_SIGNO_MENOS_EN_FINAL_LEN,
BINARY_AST_TOKENIZER_ERR_INVALID_CHAR
};
//--- Errores del parse math
enum ENUM_MATH_EVAL_EXP_ERR_PARSE
{
//---
// Dinamicos y estaticos
MATH_EVAL_EXP_ERR_PARSE_SE_ESPERABA_UN_OPERADOR_MATEMATICO,
MATH_EVAL_EXP_ERR_PARSE_OPERACION_PROHIBIDA_EN_DOUBLES,
MATH_EVAL_EXP_ERR_PARSE_TIPO_DE_OPERACION_MATH_DESCONOCIDA,
MATH_EVAL_EXP_ERR_PARSE_TIPO_DE_OPERACION_INVALIDA_PARA_DBL,
MATH_EVAL_EXP_ERR_PARSE_SE_ESPERABA_UN_VALOR,
MATH_EVAL_EXP_ERR_PARSE_SE_ESPERABA_UN_OPERADOR_LUEGO_DE_PARA,
//---
// DINAMICOS
MATH_EVAL_EXP_ERR_PARSE_VARIABLE_NO_EXISTE,
MATH_EVAL_EXP_ERR_PARSE_FUNCION_NO_EXISTE,
MATH_EVAL_EXP_ERR_PARSE_TIPO_VALOR_INVALIDO,
MATH_EVAL_EXP_ERR_PARSE_TIPO_V
};
//---
#define MATH_EXP_NODE_TYPE_STATIC (0)
#define MATH_EXP_NODE_TYPE_DYNAMIC (1)
//+------------------------------------------------------------------+
/*
!int: variable = 10;
!int: va = @mop(10 * 20 + 30 + 59 + $variable & 19 + 20);
@Print($va, " - ", "Hola");
*/
//+------------------------------------------------------------------+
#endif
//+------------------------------------------------------------------+