public ParteDecimal(TextoAParsear t) { valor = ""; try { while (true) { char c = t.GetChar(); switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': valor = valor + c; t.CharProcessed(); break; default: return; } } } catch (EndOfString eos) { return; } }
public Operador(TextoAParsear t) { operando = ' '; try { if (t.Vacio()) { throw new NotValidObject(); } char c = t.GetChar(); switch (c) { case '+': case '-': case '/': case '*': operando = c; t.CharProcessed(); return; } throw new NotValidObject(); } catch (EndOfString eos) { throw new NotValidObject(); } }
public Operacion(TextoAParsear t) { VarIzquierda = null; OpIzquierda = null; NumIzquierda = null; operador = null; operadorv = null; derecha = null; try { char c = t.GetChar(); if (c == '(') { t.CharProcessed(); OpIzquierda = new Operacion(t); c = t.GetChar(); if (c == ')') { t.CharProcessed(); } } else { try { VarIzquierda = new Variable(t); } catch (NotValidObject) { NumIzquierda = new Numero(t); } } if (VarIzquierda == null) { operador = new Operador(t); } else { operadorv = new OperadorVariable(t); } derecha = new Operacion(t); } catch (EndOfString eos) { return; } catch (NotValidObject nvo) { return; } }
private void run_Click(object sender, EventArgs e) { string ope = operacion.Text; if (ope == "clean") { log.Text = ""; operacion.Text = ""; VarValue.lista.Clear(); listaVariables.Text = ""; return; } log.Text += ope + " = "; string result; try { TextoAParsear tmp = new TextoAParsear(ope); Operacion op = new Operacion(tmp); if (!tmp.Vacio()) { throw new Exception("Error de sintaxis"); } result = op.Evalua().ToString(); log.Text += result + "\r\n"; log.SelectionStart = log.Text.Length; log.SelectionLength = 0; log.ScrollToCaret(); log.SelectAll(); operacion.Text = "(" + result + ")"; operacion.SelectionStart = operacion.Text.Length; operacion.SelectionLength = 0; listaVariables.Clear(); foreach (VarValue val in VarValue.lista) { listaVariables.Text += val.nombre.ToString() + ": " + val.value.ToString() + "\r\n"; } } catch (Exception ex) { log.Text += "\r\n" + ex.Message + "\r\n\r\n"; } operacion.Focus(); }
public Numero(TextoAParsear t) { parteentera = new ParteDecimal(); partedecimal = new ParteDecimal(); try { parteentera = new ParteDecimal(t); char c = t.GetChar(); if ((c == ',') || (c == '.')) { t.CharProcessed(); partedecimal = new ParteDecimal(t); } } catch (EndOfString eos) { return; } }
public OperadorVariable(TextoAParsear t) { if (t.Vacio()) { throw new NotValidObject(); } char c = t.GetChar(); if (c == '=') { isAssignment = true; op = null; t.CharProcessed(); } else { op = new Operador(t); } }
public Variable(TextoAParsear t) { char c = t.GetChar(); switch (c) { case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'v': case 'w': case 'x': case 'y': case 'z': t.CharProcessed(); ValueObject = VarValue.FindVar(c); return; } throw new NotValidObject(); }