ExpressEvalByLeo/Src/MathEval/Alg.mqh

31 lines
2.6 KiB
MQL5
Raw Permalink Normal View History

2026-05-12 22:27:01 -05:00
//+------------------------------------------------------------------+
//| Alg.mqh |
//| Copyright 2026, Niquel Mendoza. |
//| https://www.mql5.com/es/users/nique_372/news |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, Niquel Mendoza."
#property link "https://www.mql5.com/es/users/nique_372/news"
#property strict
//+------------------------------------------------------------------+
//| Algoritmo de AST Math |
//+------------------------------------------------------------------+
// La idea con este algirtmo es reducir al maximo el numero de recursiones que se hacen y ser super rapido
// Mis pilares son:
// 1. Para las expresion estaticias (valores raw como los llamo) se evaluan in...
// 2. Para los dinamicos usare Nodos (luego adaptare mejor la clase)
// Este algoritmo lo pense asi
// Primermante la idea es tomar 1 valor.. luego ver si hay un operador si hay entonces esperamreos que tambine haya un operador y un valor
// Si existe entonces luego bsucaremos un 4 operador con su valor.. si no existe entonces resolvermos ahi ... con Raw Si existe enonces vemos quien es el de mayor procedencia de acuerdo a eos
// Haremos recusion en difentes funciones si la procedencia es mayor entonces lo que haremos sera tomar el val1 op1 y luego nos quedaremos en val2 y lamreos a ParseNoRes para que parse lo que esta a la derecha (lo qeu falta)
// de lo contrairomos usaremos ParseInternalRaw la idea con eso es que esta funcion tome ya un valor y le añada algo (noe s como opres que se contruye)
// El algoritmo es medio complejod e explicar pero yo inicilemtne pensaba hacerlo asi
// si tengo 10+20+20*20
// Primermante la idea seria suamar 10+20 aqui qeudaira:
// Bien ahi el 2do op tien maotmente prescendeci enotnces dejo en "pausa" a 30 + y parseo eso una vez que lo tengo tenida 40 ahora si junto los reusltaods y listo... y lo itnenate es que al ser reucsio
// En caso haya mas operados a la drecha seguira avanzado hasta juntar todo ese nodo
// Nota que creo es que esto lo hice por pura intucicion iniclamtne estaba buscando como hcerlo como no encontraba algo entendible pregunte a la ia y me dio algo asqueroso
// Demasaida reucsion classes etc.... y no lo entendi bien asi que me puse a pensar como lo haria y me salio esto
// Podiramos describir a este alg como resolver lo qeu se peude y si hay matomente improtani entonces dejar en pausa lo de ahora y continuar con lo que sigue algo asi..