Exemplo n.º 1
0
        public override TreeNode GetAstCodeGenerator(SymbolTable t)
        {
            switch (op)
            {
            case "<":
                var less = new Lt((MIPSCodeGenerator.Expression)Left.GetAstCodeGenerator(t), (MIPSCodeGenerator.Expression)Rigth.GetAstCodeGenerator(t), Line);
                SetGeneratorType(less);
                return(less);

            case "<=":
                var lesseq = new Leq((MIPSCodeGenerator.Expression)Left.GetAstCodeGenerator(t), (MIPSCodeGenerator.Expression)Rigth.GetAstCodeGenerator(t), Line);
                SetGeneratorType(lesseq);
                return(lesseq);

            case "=":
                var eq = new Eq((MIPSCodeGenerator.Expression)Left.GetAstCodeGenerator(t), (MIPSCodeGenerator.Expression)Rigth.GetAstCodeGenerator(t), Line);
                SetGeneratorType(eq);
                return(eq);

            case ">":
                var greater = new Lt((MIPSCodeGenerator.Expression)Rigth.GetAstCodeGenerator(t), (MIPSCodeGenerator.Expression)Left.GetAstCodeGenerator(t), Line);
                SetGeneratorType(greater);
                return(greater);

            case ">=":
                var greaterEq = new Leq((MIPSCodeGenerator.Expression)Rigth.GetAstCodeGenerator(t), (MIPSCodeGenerator.Expression)Left.GetAstCodeGenerator(t), Line);
                SetGeneratorType(greaterEq);
                return(greaterEq);

            default: throw new InvalidOperationException();
            }
        }
Exemplo n.º 2
0
        private IEnumerable <T> InOrder()
        {
            if (Left != null)
            {
                foreach (T item in Left.InOrder())
                {
                    yield return(item);
                }
            }

            yield return(Value);

            if (Rigth != null)
            {
                foreach (T item in Rigth.InOrder())
                {
                    yield return(item);
                }
            }
        }
Exemplo n.º 3
0
 /// <summary>
 ///   devuelve true si se annadio el elemento
 /// </summary>
 /// <param name = "item"></param>
 /// <returns></returns>
 private bool AddR(T item)
 {
     if (Value == null)
     {
         //el nodo no existia y se inserta en la raiz
         Value = item;
         return(true);
     }
     else if (_comparer(Value, item) < 0) //insertar a la derecha
     {
         if (Rigth == null)
         {
             //este nodo nunca va a tener desbalance pues
             //no tiene hijo derecho
             Rigth = new OrderedList <T>(item, this, _comparer);
             ReOrder();
             return(true);
         }
         else //lo inserto a la derecha
         {
             return(Rigth.AddR(item));
         }
     }
     else if (_comparer(Value, item) > 0)
     {
         if (Left == null)
         {
             Left = new OrderedList <T>(item, this, _comparer);
             ReOrder();
             return(true);
         }
         else
         {
             return(Left.AddR(item));
         }
     }
     else
     {
         return(false);
     }
 }
Exemplo n.º 4
0
 /// <summary>
 ///   elimina a item de la coleccion
 ///   tiempo: O(log count)
 /// </summary>
 /// <param name = "item"></param>
 /// <returns></returns>
 public bool Remove(T item)
 {
     if (_comparer(Value, item) < 0 && Rigth != null)
     {
         if (Rigth.Remove(item))
         {
             Count--;
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else if (_comparer(Value, item) > 0 && Left != null)
     {
         if (Left.Remove(item))
         {
             Count--;
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else if (_comparer(Value, item) == 0) //si es igual entonces este es el nodo que hay que eliminar
     {
         Remove();
         Count--;
         return(true);
     }
     else
     {
         return(false);
     }
 }
Exemplo n.º 5
0
 /// <summary>
 ///   devuelve true si item esta en la coleccion
 ///   tiempo: O(log count)
 /// </summary>
 /// <param name = "item"></param>
 /// <returns></returns>
 public bool Contains(T item)
 {
     //(comparer( value,item) < 0)//item es mayor que value
     if (Value == null)
     {
         return(false);
     }
     else if (_comparer(Value, item) == 0)
     {
         return(true);
     }
     else if (_comparer(Value, item) < 0 && Rigth != null)
     {
         return(Rigth.Contains(item));
     }
     else if (_comparer(Value, item) > 0 && Left != null)
     {
         return(Left.Contains(item));
     }
     else
     {
         return(false);
     }
 }
Exemplo n.º 6
0
 public double Evaluate()
 {
     return(Func(Left.Evaluate(), Rigth.Evaluate()));
 }
Exemplo n.º 7
0
        public override TreeNode GetAstCodeGenerator(SymbolTable t)
        {
            switch (op)
            {
            case "+":
                var plus = new Plus((MIPSCodeGenerator.Expression)Left.GetAstCodeGenerator(t), (MIPSCodeGenerator.Expression)Rigth.GetAstCodeGenerator(t), Line);
                SetGeneratorType(plus);
                return(plus);

            case "-":
                var sub = new Sub((MIPSCodeGenerator.Expression)Left.GetAstCodeGenerator(t), (MIPSCodeGenerator.Expression)Rigth.GetAstCodeGenerator(t), Line);
                SetGeneratorType(sub);
                return(sub);

            case "*":
                var mul = new Mul((MIPSCodeGenerator.Expression)Left.GetAstCodeGenerator(t), (MIPSCodeGenerator.Expression)Rigth.GetAstCodeGenerator(t), Line);
                SetGeneratorType(mul);
                return(mul);

            case "/":
                var div = new Divide((MIPSCodeGenerator.Expression)Left.GetAstCodeGenerator(t), (MIPSCodeGenerator.Expression)Rigth.GetAstCodeGenerator(t), Line);
                SetGeneratorType(div);
                return(div);

            default: throw new InvalidOperationException();
            }
        }