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(); } }
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); } } }
/// <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); } }
/// <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); } }
/// <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); } }
public double Evaluate() { return(Func(Left.Evaluate(), Rigth.Evaluate())); }
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(); } }