public double Evaluation() { double value = 0; switch (this.Expression) { case Expression.Add: value = PreviousToken.Evaluation() + NextToken.Evaluation(); break; case Expression.Subtract: value = PreviousToken.Evaluation() - NextToken.Evaluation(); break; case Expression.Multiply: value = PreviousToken.Evaluation() * NextToken.Evaluation(); break; case Expression.Divide: if (NextToken.Evaluation() == 0) { throw new RuntimeError("You attempted to divide by zero."); } value = PreviousToken.Evaluation() / NextToken.Evaluation(); break; case Expression.Positive: value = NextToken.Evaluation(); break; case Expression.Negative: value = NextToken.Evaluation() * -1; break; case Expression.Exponent: value = Math.Pow(PreviousToken.Evaluation(), NextToken.Evaluation()); break; case Expression.OpenParenthesis: value = NextToken.Evaluation(); break; default: break; } return(value); }
public override int GetHashCode() { int hash = 1; if (PreviousToken.Length != 0) { hash ^= PreviousToken.GetHashCode(); } if (Token.Length != 0) { hash ^= Token.GetHashCode(); } if (_unknownFields != null) { hash ^= _unknownFields.GetHashCode(); } return(hash); }