diff --git a/src/rustint/core.clj b/src/rustint/core.clj index 205fecf..d3039c8 100644 --- a/src/rustint/core.clj +++ b/src/rustint/core.clj @@ -228,7 +228,7 @@ 35 "SE ESPERABA UNA DE LAS PALABRAS RESERVADAS as_str O trim" 36 "SE ESPERABA UNA DE LAS PALABRAS RESERVADAS to_string O parse" 37 "SE ESPERABA UN TIPO NUMERICO: i64, f64 O usize" - 38 "SE ESPERABA UNA FUNCION MATEMATICA: sqrt, sin, atan O abs" + 38 "SE ESPERABA UNA FUNCION MATEMATICA: sqrt, cbrt ,sin, atan O abs" 39 "SE ESPERABA UN NUMERO" 40 "SE ESPERABA LA PALABRA RESERVADA fn" 41 "DECLARACION DUPLICADA DE IDENTIFICADOR DE BIBLIOTECA, CONSTANTE O FUNCION" @@ -697,7 +697,7 @@ ) (defn hace-push-implicito? [instr] - (contains? #{'ADD 'SUB 'MUL 'DIV 'MOD 'OR 'AND 'EQ 'NEQ 'GT 'GTE 'LT 'LTE 'NEG 'NOT 'SQRT 'SIN 'ATAN 'ABS 'TOI 'TOF} instr) + (contains? #{'ADD 'SUB 'MUL 'DIV 'MOD 'OR 'AND 'EQ 'NEQ 'GT 'GTE 'LT 'LTE 'NEG 'NOT 'SQRT 'CBRT 'SIN 'ATAN 'ABS 'TOI 'TOF} instr) ) (defn confirmar-retorno [amb] @@ -1086,7 +1086,13 @@ (expresion) (procesar-terminal ,,, (symbol ")") 12) (generar ,,, 'SQRT)) - sin (-> amb + cbrt (-> amb + (escanear) + (procesar-terminal ,,, (symbol "(") 11) + (expresion) + (procesar-terminal ,,, (symbol ")") 12) + (generar ,,, 'CBRT)) + sin (-> amb (escanear) (procesar-terminal ,,, (symbol "(") 11) (expresion) @@ -2026,7 +2032,7 @@ AND (let [res (aplicar-operador-diadico and-diadico pila)] (if (nil? res) res (recur cod regs-de-act (inc cont-prg) res mapa-regs))) - ; SQRT: Incrementa cont-prg en 1, quita de la pila un elemento numerico, calcula su raiz cuadrada y la coloca al final de la pila. + ; sqrt: incrementa cont-prg en 1, quita de la pila un elemento numerico, calcula su raiz cuadrada y la coloca al final de la pila. SQRT (let [ res (Math/sqrt (last pila)), nueva_pila (assoc pila (- (count pila) 1) res) @@ -2034,6 +2040,14 @@ (recur cod regs-de-act (inc cont-prg) nueva_pila mapa-regs) ) + ; cbrt: incrementa cont-prg en 1, quita de la pila un elemento numerico, calcula su raiz cúbica y la coloca al final de la pila. + CBRT (let [ + res (Math/cbrt (last pila)), + nueva_pila (assoc pila (- (count pila) 1) res) + ] + (recur cod regs-de-act (inc cont-prg) nueva_pila mapa-regs) + ) + ; SIN: Incrementa cont-prg en 1, quita de la pila un elemento numerico, calcula su seno y lo coloca al final de la pila. SIN (let [ res (Math/sin (last pila)), @@ -2260,6 +2274,7 @@ 'return, 'sin, 'sqrt, + 'cbrt, 'std, 'stdin, 'stdout,