public void validaDir(String operando) { //Validar para cuando es extendido por etiqueta switch (operando[0]) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '@': case '%': case '$': case '-': case '+': break; case '#': encontrado = false; return; break; case '[': encontrado = false; return; break; default: LABEL etiqueta = new LABEL(operando); etiqueta.validaEtiqueta(); if (etiqueta.getValida()) { mensajeResultado = "Extendido"; modoDireccionamiento = "EXT"; encontrado = true; return; } else { mensajeResultado = "Etiqueta no valida para extendido"; encontrado = false; return; //Etiqueta no valida Error } break; } if (operando.Length == 1 && !isDigit(operando[0])) { mensajeResultado = "Error en directo: Sintaxis (%|@|$ o ninguna base) y despues valores correspondientes a la base"; encontrado = false; return; } baseNumerica b1 = new baseNumerica(operando); //b1.convert2Dec(); if(!b1.getValido()) { String menbase = ""; String menVal = ""; switch(operando[0]) { case '%': menbase = "Binario"; menVal = "1 - 0"; break; case '@': menbase = "Octal"; menVal = "0 - 7"; break; case '$': menbase = "Hexadecimal"; menVal = "0-9 o las letras de la A - F"; break; default: menbase = "Decimal"; menVal = "0 - 9"; break; } mensajeResultado = "Valores invalidos para la base." + menbase + " solo acepta los digitos del " + menVal; encontrado = false; return; } if (b1.getNumberDecimal() >= 0 && b1.getNumberDecimal() <= 255) { mensajeResultado = "Directo"; modoDireccionamiento = "DIR"; encontrado = true; return; } else if (b1.getNumberDecimal() >= 256 && b1.getNumberDecimal() <= 65535) { mensajeResultado = "Extendido"; modoDireccionamiento = "EXT"; encontrado = true; return; } else { mensajeResultado = "Fuera de rango en Extendido"; encontrado = false; return; //Fuera de rango } }
public void validaRel(String operando) { LABEL etiqueta = new LABEL(operando); etiqueta.validaEtiqueta(); if (etiqueta.getValida()) { mensajeResultado = "Relativo"; modoDireccionamiento = "REL"; encontrado = true; return; } else { mensajeResultado = "Etiqueta no valida para Relativo"; encontrado = false; return; //Relativo no valido } }
private void separaCadena(String cadena) { if (cadena[0] == ';') { txtMensajes.Text += "Comentario"; printEnter(); return; } //############################################################################################## //Separo la cadena con un automata String[] separados = new String[3];//[0]Etiqueta [1]CODOP [2]OPERANDO bool[] validos = new bool[3]; int[,] estados = new int[5,2]{ {0,1}, {2,1}, {2,3}, {4,3}, {4,4}}; int state=0,input=0,sizeString=cadena.Length,sizeTotal=0,i=0; while(i<sizeString) { switch(cadena[i]) { case ' ': case '\t': input = 1; break; default: input = 0; break; } state = estados[state,input]; switch(state){ case 0: separados[sizeTotal] += cadena[i++]; break; case 1:case 3: i++; if (i < sizeString && cadena[i] != ' ' && cadena[i] != '\t') { sizeTotal++; } break; case 2: separados[sizeTotal] += cadena[i++]; break; case 4: separados[sizeTotal] += cadena[i++]; break; } } for (int j = 0; j < 3; j++) { if (separados[j] == null) separados[j] = "NULL"; } //############################################################################################## //Creo los objetos de las respectivas clases. label = new LABEL(separados[0]); label.validaEtiqueta(); codop = new CODOP(separados[1]); codop.validaCODOP(); operando = new OPERANDO(separados[2]); operando.validaOperando(); //Valido las combinaciones if (codop.getCodop() == "NULL") { txtMensajes.Text += "Linea: " + (lineasArchivo + 1); printEnter(); txtMensajes.Text += mensajesError[0];//Dice cuales son las combinaciones validas... printEnter(); printEnter(); return; } //Validaciones para la etiqueta if (label.getValida()) { txtMensajes.Text += "ETIQUETA = " + label.getLabel();//Etiqueta printEnter(); //Guardo en el tabsim la etiqueta if (label.getLabel() != "NULL" && codop.getCodop() != "EQU") { Boolean flagEncontrada = false; foreach(String labelTMP in listaEtiquetas) { if(label.getLabel() == labelTMP) { flagEncontrada = true; } } if (!flagEncontrada) { lfile.setLabel(label.getLabel()); lfile.setValue(contLoc.getNumberHexadecimal().PadLeft(4, '0'));//Modifica1 Contoloc lfile.save(fsTabsim, 2); listaEtiquetas.Add(label.getLabel()); dirEtiquetas.Add(contLoc.getNumberHexadecimal()); } else { txtMensajes.Text += mensajesError[7]; } } //Prepara para el archivo TMP lfile.setLabel1(label.getLabel()); } else { txtMensajes.Text += "Linea: " + (lineasArchivo + 1); printEnter(); txtMensajes.Text += mensajesError[1];//Etiqueta no valida printEnter(); } //Validaciones para el CODOP if (codop.getValido()) { txtMensajes.Text += "CODOP = " + codop.getCodop();//Codop printEnter(); binarySearch(0,200,codop.getCodop()); if (codop.getExiste()) { codop.revizaModoDireccionamiento(arrayCODOP,arrayTMPCODOP[codop.getIniciaCODOP()].start,arrayTMPCODOP[codop.getIniciaCODOP()].end,operando); //Preparo para guardar en el archivo TMP lfile.setCODOP(codop.getCodop()); } else { directive = new DIRECTIVA(codop.getCodop(),operando,label); if (directive.getExiste()) { if(directive.getValida()) { //Preparo para guardar en el archivo TMP if(codop.getCodop() == "ORG") { baseNumerica b1 = new baseNumerica(System.Convert.ToString(operando.getOperando())); contLoc = b1; dirInicial = b1; //contLoc.setNumberHexadecimal(b1.getNumberHexadecimal()); } else if(codop.getCodop() == "EQU") { baseNumerica b1 = new baseNumerica(System.Convert.ToString(operando.getOperando())); Boolean flagExist = false; foreach(String stmp in listaEtiquetas) { if(stmp == label.getLabel()) { flagExist = true; } } if (flagExist) { txtMensajes.Text += mensajesError[7]; printEnter(); } else { lfile.setLabel(label.getLabel()); //lfile.setValue(directive.getValueHexadecimal()); lfile.setValue(b1.getNumberHexadecimal().PadLeft(4, '0'));//Modifca2 Contloc lfile.save(fsTabsim, 2); listaEtiquetas.Add(label.getLabel()); dirEtiquetas.Add(b1.getNumberHexadecimal().PadLeft(4,'0')); lfile.setValue1(b1.getNumberHexadecimal().PadLeft(4, '0')); } } lfile.setCODOP(codop.getCodop()); } else { txtMensajes.Text += directive.getImprimirMensaje(); printEnter(); } } else { txtMensajes.Text += mensajesError[5];//El CODOP ingresado no existe printEnter(); } } } else { txtMensajes.Text += "Linea: " + (lineasArchivo + 1); printEnter(); txtMensajes.Text += mensajesError[2];//Codop no valido printEnter(); } //Validaciones para el OPERANDO txtMensajes.Text += "OPERANDO = " + operando.getOperando();//Operando printEnter(); //Preparo para guardar operando lfile.setOperando(operando.getOriginal()); txtMensajes.Text += codop.getMensajeResultado() + " "; if (codop.getBytesTotales() > 0) { txtMensajes.Text += Convert.ToString(codop.getBytesTotales()) + " bytes"; } printEnter(); //Verifico si el codop necesita un operando if (operando.getOperando() == "NULL" && codop.getNecesitaOperando() && codop.getExiste()) { txtMensajes.Text += mensajesError[3];//El codop necesita operando printEnter(); } else if(operando.getOperando() != "NULL" && !codop.getNecesitaOperando() && codop.getExiste()) { txtMensajes.Text += mensajesError[4];//El codop no necesita operando printEnter(); } printEnter(); //Verifico si hay un END de cierre if (codop.getCodop() == "END") { banderaEnd = true; } baseNumerica OV = new baseNumerica(System.Convert.ToString(0)); //Recalculo el ContLOc if (codop.getExiste()) { OV = new baseNumerica(System.Convert.ToString(codop.getBytesTotales())); } else if(directive.getValida()) { OV = new baseNumerica(System.Convert.ToString(directive.getSize())); } //int temporal = contLoc.getNumberDecimal() + OV.getNumberDecimal(); //baseNumerica TMP = new baseNumerica(System.Convert.ToString(temporal)); //contLoc = TMP; if (codop.getCodop() != "EQU") { lfile.setValue1(contLoc.getNumberHexadecimal().PadLeft(4, '0'));//Modifica3 Contloc } //Guardo el TMP lfile.save(fsTMP,1); int temporal = contLoc.getNumberDecimal() + OV.getNumberDecimal(); baseNumerica TMP = new baseNumerica(System.Convert.ToString(temporal)); contLoc = TMP; //Llamo al destructor codop = null; GC.Collect(); }