public String generar3D() { String codigo = ""; cadena3D expresion3D = expresion.resCondicion(); pasadas pasadas = new pasadas(ambito.tablaSimbolo); if (expresion3D.tipo.Equals("BOOLEANO")) { codigo += "/*Inicio del ciclo REPETIR-HASTA*/" + "\r\n"; //Para el caso de HACER-MIENTRAS(True) if (expresion3D.etqVerdadera == "" && expresion3D.etqFalsa == "") { expresion3D.etqVerdadera = memoria.getEtq(); expresion3D.etqFalsa = memoria.getEtq(); codigo += expresion3D.etqFalsa + ":" + "\r\n"; /*Se concatena las sentencias dentro del repetir_hasta*/ codigo += memoria.identar(pasadas.ejecutar()); /*Se concatena las sentencias dentro del repetir_hasta*/ codigo += expresion3D.codigo; codigo += "\t" + "if " + expresion3D.temporal + "==1 goto " + expresion3D.etqVerdadera + ";\n"; codigo += "\t" + "goto " + expresion3D.etqFalsa + ";\n"; } else { codigo += expresion3D.etqFalsa + ":" + "\r\n"; /*Se concatena las sentencias dentro del repetir_hasta*/ codigo += memoria.identar(pasadas.ejecutar()); /*Se concatena las sentencias dentro del repetir_hasta*/ codigo += expresion3D.codigo; } codigo += expresion3D.etqVerdadera + ":" + "\r\n"; codigo += "/*Fin del ciclo REPETIR-HASTA*/" + "\r\n\n"; } else { memoria.addError("ERROR SEMANTICO ", "La condicion debe ser de tipo booleano", expresion.fila, expresion.columna); } //Goto etiqueta de retorno y salida codigo = memoria.reemplazar(codigo, "goto " + expresion3D.etqVerdadera + ";", "goto " + expresion3D.etqFalsa + ";"); //Goto etiqueta de retorno y salida return(codigo); }
public String generar3D() { String codigo = ""; String etqRetorno = memoria.getEtq(); String etqSalida = memoria.getEtq(); codigo += "/*Inicio del LOOP*/" + "\r\n"; codigo += etqRetorno + ":" + "\r\n"; /*Se concatena las sentencias dentro del mientras*/ pasadas pasadas = new pasadas(ambito.tablaSimbolo); codigo += memoria.identar(pasadas.ejecutar()); /*Se concatena las sentencias dentro del mientras*/ codigo += "goto " + etqRetorno + ";\n"; codigo += etqSalida + ":" + "\r\n"; //Goto etiqueta de retorno y salida codigo = memoria.reemplazar(codigo, "goto " + etqSalida + ";", "goto " + etqRetorno + ";"); //Goto etiqueta de retorno y salida codigo += "/*Fin del LOOP*/" + "\r\n\n"; return(codigo); }
public String generar3D() { String codigo = ""; pasadas pasadas = new pasadas(ambito.tablaSimbolo); codigo += pasadas.ejecutar(); return(codigo); }
public String generar3D() { String codigo = ""; cadena3D expresion3D = expresion.resCondicion(); codigo += "/*Inicio de SI*/" + "\r\n"; if (expresion3D.tipo == "BOOLEANO") { codigo += expresion3D.codigo; codigo += expresion3D.etqVerdadera + ":" + "\r\n"; pasadas pasadas = new pasadas(ambito.tablaSimbolo); codigo += memoria.identar(pasadas.ejecutar()); String etiqSalida = memoria.getEtq(); codigo += "goto " + etiqSalida + ";\r\n"; codigo += expresion3D.etqFalsa + ":" + "\r\n\n"; if (lista_sino_si != null) { foreach (sino_si sino_si in lista_sino_si) { cadena3D expresion3D_sino_si = sino_si.expresion.resCondicion(); if (expresion3D.tipo == "BOOLEANO") { codigo += "//Inicio de sino_si" + "\r\n"; codigo += expresion3D_sino_si.codigo; codigo += expresion3D_sino_si.etqVerdadera + ":" + "\r\n"; pasadas = new pasadas(sino_si.ambito.tablaSimbolo); codigo += memoria.identar(pasadas.ejecutar()); codigo += "goto " + etiqSalida + ";\r\n"; codigo += expresion3D_sino_si.etqFalsa + ":" + "\r\n"; codigo += "//Fin de sino_si" + "\r\n\n"; } else { memoria.addError("ERROR SEMANTICO ", "La condicion SI_NO_SI debe ser de tipo booleano", sino_si.expresion.fila, sino_si.expresion.columna); } } } if (sino != null) { codigo += "//Inicio de sino" + "\r\n"; pasadas = new pasadas(sino.ambito.tablaSimbolo); codigo += memoria.identar(pasadas.ejecutar()); codigo += "//Inicio de sino" + "\r\n"; } codigo += etiqSalida + ":" + "\r\n"; codigo += "/*Fin de SI*/" + "\r\n\n"; } else { memoria.addError("ERROR SEMANTICO ", "La condicion SI debe ser de tipo booleano", expresion.fila, expresion.columna); } return(codigo); }
public String generar3D() { String codigo = ""; String etq1 = memoria.getEtq(); String etqVerdadera = memoria.getEtq(); String etqFalsa = memoria.getEtq(); String etqSalida = memoria.getEtq(); expresion expresion_or = new expresion(expresion1, expresion2, "||", "||", fila, columna, null); expresion expresion_and = new expresion(expresion1, expresion2, "&&", "&&", fila, columna, null); cadena3D expresion3D_OR = expresion_or.resCondicion(); if (expresion3D_OR.tipo.Equals("BOOLEANO")) { codigo += "/*Inicio del ciclo X*/" + "\r\n"; codigo += etq1 + ":" + "\r\n"; codigo += expresion3D_OR.codigo; codigo += expresion3D_OR.etqVerdadera + ":" + "\r\n"; codigo += memoria.identar("goto " + etqVerdadera + ";\r\n"); codigo += expresion3D_OR.etqFalsa + ":" + "\r\n"; codigo += memoria.identar("goto " + etqSalida + ";\r\n"); codigo += etqVerdadera + ":" + "\r\n"; /*Se concatena las sentencias dentro del mientras*/ pasadas pasadas = new pasadas(ambito.tablaSimbolo); codigo += memoria.identar(pasadas.ejecutar()); /*Se concatena las sentencias dentro del mientras*/ cadena3D expresion3D_AND = expresion_and.resCondicion(); codigo += expresion3D_AND.codigo; codigo += expresion3D_AND.etqVerdadera + ":" + "\r\n"; codigo += memoria.identar("goto " + etqVerdadera + ";\r\n"); codigo += expresion3D_AND.etqFalsa + ":" + "\r\n"; codigo += memoria.identar("goto " + etqSalida + ";\r\n"); codigo += etqSalida + ":" + "\r\n"; codigo += "/*Fin del ciclo X*/" + "\r\n\n"; } else { memoria.addError("ERROR SEMANTICO ", "La condicion debe ser de tipo booleano", fila, columna); } //Goto etiqueta de retorno y salida codigo = memoria.reemplazar(codigo, "goto " + etqSalida + ";", "goto " + etq1 + ";"); //Goto etiqueta de retorno y salida return(codigo); }
public String generar3D() { String codigo = ""; codigo += "/*Inicio del ciclo para*/" + "\r\n"; if (declara_asigna.rol.Equals("DECLARACION")) { declaracion declaracion = (declaracion)declara_asigna.valor; codigo += declaracion.generar3D(); } else { asignacion asignacion = (asignacion)declara_asigna.valor; codigo += asignacion.generar3D(); } String etqRetorno = memoria.getEtq(); cadena3D expresion3D = condicion.resCondicion(); if (expresion3D.tipo.Equals("BOOLEANO")) { codigo += etqRetorno + ":" + "\r\n"; codigo += expresion3D.codigo; codigo += expresion3D.etqVerdadera + ":" + "\r\n"; /*Se concatena las sentencias dentro del for*/ pasadas pasadas = new pasadas(ambito.tablaSimbolo); codigo += memoria.identar(pasadas.ejecutar()); /*Se concatena las sentencias dentro del for*/ codigo += ((aumento_decremento)decre_aum.valor).generar3D(); codigo += "goto " + etqRetorno + ";\r\n"; codigo += expresion3D.etqFalsa + ":" + "\r\n"; } else { memoria.addError("ERROR SEMANTICO ", "La condicion debe ser de tipo booleano", condicion.fila, condicion.columna); } codigo += "/*Fin del ciclo para*/" + "\r\n\n"; //Goto etiqueta de retorno y salida codigo = memoria.reemplazar(codigo, "goto " + expresion3D.etqFalsa + ";", "goto " + etqRetorno + ";"); //Goto etiqueta de retorno y salida return(codigo); }
public String generar3D() { String codigo = ""; codigo += "void " + nombre + "(){\n"; pasadas pasadas = new pasadas(ambito.tablaSimbolo); codigo += memoria.identar(pasadas.ejecutar()); String etq = memoria.getEtq(); codigo += memoria.identar(etq + ":\r\n"); codigo += "}" + "\r\n\n"; codigo = codigo.Replace("~RETORNAR~", "goto " + etq + ";"); return(codigo); }
public String generar3D() { String codigo = ""; cadena3D expresion3D = expresion.resCondicion(); String etiqSalida = memoria.getEtq(); codigo += "/*Inicio de Elegir*/" + "\r\n"; codigo += expresion3D.codigo; if (lista_caso != null) { foreach (caso caso in lista_caso) { cadena3D expresion_caso = caso.expresion.resCondicion(); codigo += expresion_caso.codigo; String etiqFalsa = memoria.getEtq(); codigo += "//Inicio de caso" + "\r\n"; codigo += "ifFalse " + expresion3D.temporal + "==" + expresion_caso.temporal + " goto " + etiqFalsa + "; \r\n"; pasadas pasadas = new pasadas(caso.ambito.tablaSimbolo); codigo += memoria.identar(pasadas.ejecutar()); codigo += etiqFalsa + ": \r\n"; codigo += "//Fin de caso" + "\r\n"; } } if (defecto != null) { codigo += "//Inicio Defecto" + "\r\n"; pasadas pasadas = new pasadas(defecto.ambito.tablaSimbolo); codigo += memoria.identar(pasadas.ejecutar()); codigo += "//Fin Defecto" + "\r\n"; } codigo += etiqSalida + ":" + "\r\n"; codigo += "/*Fin de Elegir*/" + "\r\n\n"; codigo = memoria.reemplazar(codigo, "goto " + etiqSalida + ";", ""); return(codigo); }