public static bool Compare(Symbol a, Symbol b) { OperationSymbol op_a = a as OperationSymbol; OperationSymbol op_b = b as OperationSymbol; if(op_a == null || op_b == null) { return false; } return !(op_a is GroupSymbol) && op_a.Precedence >= op_b.Precedence; }
public static bool IsRight(Symbol symbol) { GroupSymbol group = symbol as GroupSymbol; return group != null && group.Direction == GroupSymbol.GroupDirection.Right; }
public InvalidOperandException(Symbol symbol) : base(symbol.ToString()) { }
public virtual Symbol Evaluate(Symbol a, Symbol b) { if(a is VoidSymbol || b is VoidSymbol) { throw new InvalidOperandException(a, b); } try { return Evaluate((ValueSymbol)a, (ValueSymbol)b); } catch { throw new InvalidOperandException(a, b); } }
public InvalidOperandException(Symbol a, Symbol b) : base(String.Format("{0}, {1}", a, b)) { }