/* |------------------------------------------------------------------------------------------------------------------- | EJECUCIÓN FINAL |------------------------------------------------------------------------------------------------------------------- | */ public override itemRetorno ejecutar(elementoEntorno elementoEntor) /* |---------------------------- | EJECUTAR |---------------------------- | 0 = normal | 1 = return; | 2 = break | 3 = continue | 4 = errores */ { /* |---------------------------- | tCaso + sAbreParent + E + sCierraParent + tDe + sAbreLlave + CUERPO_CASE + sCierraLlave; */ itemRetorno retorno = new itemRetorno(0); if (hayErrores()) { return(retorno); } _E nodoE = (_E)getNodo("E"); itemValor valE = nodoE.getValor(elementoEntor); _CUERPO_CASE nodoCuerpo = (_CUERPO_CASE)hijos[1]; elementoEntorno entornoIf = new elementoEntorno(elementoEntor, tablaSimbolos, "case", elementoEntor.este); itemRetorno cuerpoCase = nodoCuerpo.ejecutar(entornoIf, valE); if (cuerpoCase.isRomper()) //este codigo sirve para eliminar el romper en los nodos, más arriba, y solo se quede en el case { return(new itemRetorno(0)); } else { return(retorno); } }
public itemRetorno ejecutar(elementoEntorno elementoEntor, itemValor expresion) /* |---------------------------- | EJECUTAR |---------------------------- | 0 = normal | 1 = return; | 2 = break | 3 = continue | 4 = errores */ { itemRetorno retorno = new itemRetorno(0); if (hayErrores()) { return(retorno); } if (hijos.Count == 3) /* |---------------------------- | E + sDosPuntos + sAbreLlave + LST_CUERPO + sCierraLlave + CUERPO_CASE */ { _E nodoE = (_E)getNodo("E"); itemValor valE = nodoE.getValor(elementoEntor); IgualQue igual = new IgualQue(new _E("temp1", tablaSimbolos), new _E("temp2", tablaSimbolos), tablaSimbolos, new token("=")); itemValor resultado = igual.opIgualacion(expresion, valE, "IGUALACION", elementoEntor); Object objetoValor = resultado.getValorParseado("booleano"); Boolean condicion = false; if (objetoValor != null) { condicion = (Boolean)objetoValor; if (condicion) { _LST_CUERPO nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO"); itemRetorno break1 = nodoCuerpo.ejecutar(elementoEntor); //voy a revisar si no hay break prro if (break1.isRomper()) { println("es romper"); itemRetorno ret2 = new itemRetorno(0); //asi retorno un normal return(ret2); //aquí rompo prro } else { println("no es romper"); _CUERPO_CASE cuerpoCase = (_CUERPO_CASE)getNodo("CUERPO_CASE"); return(cuerpoCase.ejecutar(elementoEntor, expresion)); } } else { println("ejecutando cuerpo clase"); _CUERPO_CASE sino_si = (_CUERPO_CASE)getNodo("CUERPO_CASE"); return(sino_si.ejecutar(elementoEntor, expresion)); } } else { println("E + sDosPuntos + sAbreLlave + LST_CUERPO + sCierraLlave + CUERPO_CASE-> No se retorno un boolenano en la igualación"); return(retorno); } } else if (hijos.Count == 2) /* |---------------------------- | E + sDosPuntos + sAbreLlave + LST_CUERPO + sCierraLlave */ { _E nodoE = (_E)getNodo("E"); itemValor valE = nodoE.getValor(elementoEntor); IgualQue igual = new IgualQue(new _E("temp1", tablaSimbolos), new _E("temp2", tablaSimbolos), tablaSimbolos, new token("=")); itemValor resultado = igual.opIgualacion(expresion, valE, "IGUALACION", elementoEntor); Object objetoValor = resultado.getValorParseado("booleano"); Boolean condicion = false; if (objetoValor != null) { condicion = (Boolean)objetoValor; if (condicion) { _LST_CUERPO nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO"); return(nodoCuerpo.ejecutar(elementoEntor)); } else { return(retorno); } } else { println(" E + sDosPuntos + sAbreLlave + LST_CUERPO + sCierraLlave -> No se retorno un boolenano en la igualación"); return(retorno); } } else if (hijos.Count == 1) /* |---------------------------- | tDefecto + sDosPuntos + sAbreLlave + LST_CUERPO + sCierraLlave; */ { _LST_CUERPO nodoCuerpo = (_LST_CUERPO)getNodo("LST_CUERPO"); return(nodoCuerpo.ejecutar(elementoEntor)); } else { return(retorno); } }