Пример #1
0
 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);
 }
Пример #2
0
        /// <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();
        }