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 = ""; expresion expresion_llamada_objeto = new expresion(null, null, "LLAMADA_OBJETO", "LLAMADA_OBJETO", fila, fila, llamadaObjeto); expresion expresion_tipo = new expresion(expresion_llamada_objeto, null, tipo, tipo, fila, fila, null); codigo += expresion_tipo.resCondicion().codigo; 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); }
public String ejecutar() { String codigo = ""; for (int i = 0; i < tablaSimbolo.Count(); i++) { if (tablaSimbolo[i].rol.Equals("CLASE")) { clase clase = (clase)tablaSimbolo[i].valor; codigo += clase.generar3D(); } else if (tablaSimbolo[i].rol.Equals("DECLARACION")) { declaracion declaracion = (declaracion)tablaSimbolo[i].valor; codigo += declaracion.generar3D(); } else if (tablaSimbolo[i].rol.Equals("METODO")) { metodo metodo = (metodo)tablaSimbolo[i].valor; codigo += metodo.generar3D(); } else if (tablaSimbolo[i].rol.Equals("CONSTRUCTOR")) { metodo metodo = (metodo)tablaSimbolo[i].valor; codigo += metodo.generar3D(); } else if (tablaSimbolo[i].rol.Equals("MIENTRAS")) { mientras metodo = (mientras)tablaSimbolo[i].valor; codigo += metodo.generar3D(); } else if (tablaSimbolo[i].rol.Equals("ASIGNACION")) { asignacion asignacion = (asignacion)tablaSimbolo[i].valor; codigo += asignacion.generar3D(); } else if (tablaSimbolo[i].rol.Equals("HACER_MIENTRAS")) { hacer_mientras hacer_mientras = (hacer_mientras)tablaSimbolo[i].valor; codigo += hacer_mientras.generar3D(); } else if (tablaSimbolo[i].rol.Equals("REPETIR_HASTA")) { repetir_hasta repetir_hasta = (repetir_hasta)tablaSimbolo[i].valor; codigo += repetir_hasta.generar3D(); } else if (tablaSimbolo[i].rol.Equals("LOOP")) { loop loop = (loop)tablaSimbolo[i].valor; codigo += loop.generar3D(); } else if (tablaSimbolo[i].rol.Equals("IMPRIMIR")) { imprimir imprimir = (imprimir)tablaSimbolo[i].valor; codigo += imprimir.generar3D(); } else if (tablaSimbolo[i].rol.Equals("IMPRIMIR")) { imprimir imprimir = (imprimir)tablaSimbolo[i].valor; codigo += imprimir.generar3D(); } else if (tablaSimbolo[i].rol.Equals("PARA")) { para para = (para)tablaSimbolo[i].valor; codigo += para.generar3D(); } else if (tablaSimbolo[i].rol.Equals("ELEGIR")) { elegir elegir = (elegir)tablaSimbolo[i].valor; codigo += elegir.generar3D(); } else if (tablaSimbolo[i].rol.Equals("SI")) { si elegir = (si)tablaSimbolo[i].valor; codigo += elegir.generar3D(); } else if (tablaSimbolo[i].rol.Equals("CONTINUAR")) { codigo += "~CONTINUAR~" + "//Continuar \r\n\n"; } else if (tablaSimbolo[i].rol.Equals("SALIR")) { codigo += "~SALIR~" + "//Salir \r\n\n"; } else if (tablaSimbolo[i].rol.Equals("RETORNAR")) { expresion expresion = (expresion)tablaSimbolo[i].valor; cadena3D expresion3D = expresion.resCondicion(); codigo += "/*Inicio de retorno*/" + "\r\n"; codigo += expresion3D.codigo + "\r\n"; String temp = memoria.getTemp(); codigo += temp + "=P+1" + ";" + "\r\n"; codigo += "Stack[" + temp + "]=" + expresion3D.temporal + ";" + "\r\n"; codigo += "~RETORNAR~" + "//Retornar \r\n"; codigo += "/*Fin de retorno*/" + "\r\n\n"; } } return(codigo); }