public Befehl(int i, VariablenWrap a, VariablenWrap b, Variable c, string Line) { this.i = i; this.a = a; this.b = b; this.c = c; this.c.setBefehl(this); this.Line = Line; this.op = getOp(i); }
/// <summary> /// evaluiert von line[a] bis line[b-1] (beide einschließlich) /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public VariablenWrap evalUnaryMath(int a, int b) { VariablenWrap c = new VariablenWrap(new Variable(), false, false); bool minus = false; bool kehrbruch = false; for (int i = a; i < b; i++) { switch (Line[i]) { case '*': case '+': break; case '-': minus = !minus; break; case '/': kehrbruch = !kehrbruch; break; default: int j = -1; if (kommaZiffer(i)) { j = suchKommaZahl(i); c.variable.setab(i, j + 1); c.variable.parse(Double.Parse(Line.Substring(i, j + 1 - i))); Variablen.Add("Parse: " + Line.Substring(i, j + 1 - i) + ": " + c.variable.ToString(), c.variable); } else if (Line[i] == '(') { j = suchKlammer(i); c = evalBinaryMath(i + 1, j); } else if (grossbuchstabe(i)) { j = suchVariable(i); c = new VariablenWrap(getVariable(i, j), false, false); } else if (Line[i] == '!') { VariablenWrap d = evalUnaryMath(i + 1, b); Variable e = new Variable(a, b); lokaleVariablenzahler++; Variablen.Add("lokale Variable " + lokaleVariablenzahler, e); Befehle.Add(new Befehl(i, d, null, e, Line)); c = new VariablenWrap(e, false, false); j = b - 1; } c.minus = minus; c.kehrbruch = kehrbruch; if (j + 1 == b) return c; else throw new NotImplementedException(); } } throw new NotImplementedException(); }