public String generar3D() { String codigo = ""; cadena3D expresion3D = expresion.resCondicion(); codigo += expresion3D.codigo; 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 = ""; 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 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 = ""; 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); }
public String generar3D() { String codigo = ""; cadena3D expresion3D = expresion.resCondicion(); if (expresion3D.temporal != "") { if (expresion3D.tipo == "ENTERO") { codigo += "/*Inicio impresion de entero*/" + "\r\n"; codigo += expresion3D.codigo; codigo += "print(\"%d\"," + expresion3D.temporal + ");" + "\r\n"; codigo += "/*Fin impresion de entero*/" + "\r\n\n"; } else if (expresion3D.tipo == "DECIMAL") { codigo += "/*Inicio impresion de decimal*/" + "\r\n"; codigo += expresion3D.codigo; codigo += "print(\"%f\"," + expresion3D.temporal + ");" + "\r\n"; codigo += "/*Fin impresion de decimal*/" + "\r\n\n"; } else if (expresion3D.tipo == "BOOLEANO") { codigo += "/*Inicio impresion de booleano*/" + "\r\n"; codigo += expresion3D.codigo; codigo += "print(\"%d\"," + expresion3D.temporal + ");" + "\r\n"; codigo += "/*Fin impresion de booleano*/" + "\r\n\n"; } else if (expresion3D.tipo == "CARACTER") { codigo += "/*Inicio impresion de caracter*/" + "\r\n"; codigo += expresion3D.codigo; codigo += "print(\"%c\"," + expresion3D.temporal + ");" + "\r\n"; codigo += "/*Fin impresion de caracter*/" + "\r\n\n"; } else if (expresion3D.tipo == "CADENA") { String temp1 = memoria.getTemp(); String temp2 = memoria.getTemp(); String etq1 = memoria.getEtq(); String etq2 = memoria.getEtq(); codigo += "/*Inicio impresion de cadena*/" + "\r\n"; codigo += expresion3D.codigo + "\r\n"; codigo += temp1 + "=" + expresion3D.temporal + "; //Posicion Heap cadena" + "\r\n"; codigo += etq1 + ":" + "\r\n"; codigo += temp2 + "=" + "Heap[" + temp1 + "]; //Asignar ascii" + "\r\n"; codigo += "if " + temp2 + "==0 goto " + etq2 + ";" + "\r\n"; codigo += "print(\"%c\"," + temp2 + ");" + "\r\n"; codigo += temp1 + "=" + temp1 + "+1" + ";" + "\r\n"; codigo += "goto " + etq1 + ";" + "\r\n"; codigo += etq2 + ":" + "\r\n"; codigo += "/*Fin impresion de cadena*/" + "\r\n\n"; } } else { memoria.addError("ERROR SEMANTICO ", "La expresion debe retonar un temporal", expresion.fila, expresion.columna); } return(codigo); }
public String generar3D() { String codigo = ""; if (expresion != null) { /*Declaracion y asignacion*/ cadena3D expresion3D = expresion.resCondicion(); if (tipo.Equals("ENTERO")) { if (expresion3D.tipo.Equals("ENTERO") || expresion3D.tipo.Equals("DECIMAL") || expresion3D.tipo.Equals("CARACTER") || expresion3D.tipo.Equals("BOOLEANO")) { codigo += "/*Inicio Declaracion*/" + "\r\n"; codigo += expresion3D.codigo; String temp = memoria.getTemp(); codigo += temp + "=" + "P+" + padre.posicion.ToString() + ";" + "\r\n"; codigo += "Stack[" + temp + "]=" + expresion3D.temporal + ";" + "\r\n"; codigo += "/*Fin Declaracion*/" + "\r\n\n"; } else { memoria.addError("ERROR SEMANTICO ", tipo + " -NO COINCIDEN TIPOS- " + expresion3D.tipo, fila, columna); } } else if (tipo.Equals("DECIMAL")) { if (expresion3D.tipo.Equals("ENTERO") || expresion3D.tipo.Equals("DECIMAL") || expresion3D.tipo.Equals("CARACTER") || expresion3D.tipo.Equals("BOOLEANO")) { codigo += "/*Inicio Declaracion*/" + "\r\n"; codigo += expresion3D.codigo; String temp = memoria.getTemp(); codigo += temp + "=" + "P+" + padre.posicion.ToString() + ";" + "\r\n"; codigo += "Stack[" + temp + "]=" + expresion3D.temporal + ";" + "\r\n"; codigo += "/*Fin Declaracion*/" + "\r\n\n"; } else { memoria.addError("ERROR SEMANTICO ", tipo + " -NO COINCIDEN TIPOS- " + expresion3D.tipo, fila, columna); } } else if (tipo.Equals("CARACTER")) { if (expresion3D.tipo.Equals("ENTERO") || expresion3D.tipo.Equals("CARACTER")) { codigo += "/*Inicio Declaracion*/" + "\r\n"; codigo += expresion3D.codigo; String temp = memoria.getTemp(); codigo += temp + "=" + "P+" + padre.posicion.ToString() + ";" + "\r\n"; codigo += "Stack[" + temp + "]=" + expresion3D.temporal + ";" + "\r\n"; codigo += "/*Fin Declaracion*/" + "\r\n\n"; } else { memoria.addError("ERROR SEMANTICO ", tipo + " -NO COINCIDEN TIPOS- " + expresion3D.tipo, fila, columna); } } else if (tipo.Equals("CADENA")) { if (expresion3D.tipo.Equals("CADENA")) { codigo += "/*Inicio Declaracion*/" + "\r\n"; codigo += expresion3D.codigo; String temp = memoria.getTemp(); codigo += temp + "=" + "P+" + padre.posicion.ToString() + ";" + "\r\n"; codigo += "Stack[" + temp + "]=" + expresion3D.temporal + ";" + "\r\n"; codigo += "/*Inicio Declaracion*/" + "\r\n\n"; } else { memoria.addError("ERROR SEMANTICO ", tipo + " -NO COINCIDEN TIPOS- " + expresion3D.tipo, fila, columna); } } } else { if (dimensiones.Count > 0) { /*Declaracion arreglo*/ codigo += "/*Inicio Declaracion Arreglo*/" + "\r\n"; String temp_pos_heap = memoria.getTemp(); String temp_pos_stack = memoria.getTemp(); String temp_dimension = memoria.getTemp(); codigo += temp_pos_heap + "=H" + ";" + "\r\n"; codigo += temp_pos_stack + "=" + "P+" + padre.posicion.ToString() + ";" + "\r\n"; codigo += "Stack[" + temp_pos_stack + "]=" + temp_pos_heap + ";" + "\r\n"; String temp_num_dimensiones = memoria.getTemp(); codigo += temp_num_dimensiones + "=" + dimensiones.Count + ";" + "\r\n"; codigo += "Heap[H]=" + temp_num_dimensiones + ";" + " //Numero de dimensiones del arreglo \r\n"; codigo += "H = H + 1;" + "\r\n\n"; codigo += temp_dimension + "=1;" + "\r\n\n"; foreach (expresion expresion in dimensiones) { cadena3D expresion3D = expresion.resCondicion(); codigo += "//Inicio valor dimension" + "\r\n"; codigo += expresion3D.codigo; codigo += "Heap[H]=" + expresion3D.temporal + ";" + "\r\n"; codigo += "//Fin valor dimension" + "\r\n\n"; codigo += "H = H + 1;" + "\r\n"; codigo += temp_dimension + "=" + temp_dimension + " * " + expresion3D.temporal + "; //Numero dimensiones que se necesitan apartar en el Heap" + "\r\n\n"; } codigo += "H = H + " + temp_dimension + "; //Se apartan las posiciones en el Heap" + "\r\n"; codigo += "/*Fin Declaracion Arreglo*/" + "\r\n\n"; } else { /*Declaracion nulo*/ codigo += "/*Inicio Declaracion*/" + "\r\n"; String temp = memoria.getTemp(); codigo += temp + "=" + "P+" + padre.posicion.ToString() + ";" + "\r\n"; codigo += "Stack[" + temp + "]=" + memoria.inicia_variable + ";" + "\r\n"; codigo += "/*Fin Declaracion*/" + "\r\n\n"; } } return(codigo); }