//Función que prepara un cuádruplo con solo dos variables, sin crear una variable temporal public bool createIntermediateCodeNoTemp(int op, Variable var1, Variable var2) { if (var1 == null || var2 == null) { return(false); } //Variable que guarda el resultado de hacer una operación entre dos tipos de dato parseVariable(var1); parseVariable(var2); int resultType = cuboSemantico.semanticCube[var1.getType(), var2.getType(), op]; //Si el resultado es UNDEFINED if (resultType == OperationTypes.TYPE_UNDEFINED) { //Se regresa false en señal de error return(false); } //Objeto de cuádruplo de operación que genera el cuádruplo a escrubur en el archivo de cuádruplos OperationQuadruple quadruple = new OperationQuadruple(); quadruple.setLineNumber(lineCont); //Se le asigna el número de línea que le pertenece quadruple.setOperator(op); //Se le asigna el operador que va a utilizar quadruple.setVariables(var1, var2); //Se le asigna las variables que se utilizan en la operación //Se manda a escribir en el archivo de cuádruplos writeIntermediateCode(quadruple); //Se regresa true como operación exitosa return(true); }
//Función que genera el cuádruplo con 3 variables (incluye la variable temporal) public void createIntermediateCode(int op, Variable var1, Variable var2) { if (var1 == null || var2 == null) { return; } parseVariable(var1); parseVariable(var2); //Se obtiene el tipo que guarda la variable temporal. Al ser la variable que va a almacenar el resultado de una //operación, su tipo de dato es el que resulte de hacer esa operación int resultType = cuboSemantico.semanticCube[var1.getType(), var2.getType(), op]; Variable tempVar = getTempVar(resultType, true); //Se le hace push a la pila de símbolos pushSymbolStack(tempVar); //Se crea un cádruplo de operación para esta operación OperationQuadruple quadruple = new OperationQuadruple(); quadruple.setOperator(op); //Se le guarda la operación que va a realizar quadruple.setVariables(var1, var2, tempVar); //Se guardan las variables involucradas quadruple.setLineNumber(lineCont); //Se le guarda el número de línea que le corresponde //Se manda a escribir el cuádruplo al archivo de cuádruplos writeIntermediateCode(quadruple); }