using System.Collections.Generic;
public interface Function
public class DoubleWrapper : Function
public const int ROUND = 9;
private double currValue;
public DoubleWrapper(double inValue)
currValue = Math.Round(inValue, ROUND);
public DoubleWrapper eval()
return Convert.ToString(currValue);
public static DoubleWrapper operator +(DoubleWrapper in1, DoubleWrapper in2)
return new DoubleWrapper(in1.getValue() + in2.getValue());
public static DoubleWrapper operator -(DoubleWrapper in1, DoubleWrapper in2)
return new DoubleWrapper(in1.getValue() - in2.getValue());
public static DoubleWrapper operator /(DoubleWrapper in1, DoubleWrapper in2)
return new DoubleWrapper(in1.getValue() / in2.getValue());
public static DoubleWrapper operator *(DoubleWrapper in1, DoubleWrapper in2)
return new DoubleWrapper(in1.getValue() * in2.getValue());
public class Div : Function
public Div(Function f1, Function f2)
public DoubleWrapper eval()
return func1.eval() / func2.eval();
return func1.toString() + " / " + func2.toString();
public class Mult : Function
public Mult(Function f1, Function f2)
public DoubleWrapper eval()
return func1.eval() * func2.eval();
return func1.toString() + " * " + func2.toString();
public class Sum : Function
public Sum(Function f1, Function f2)
public DoubleWrapper eval()
return func1.eval() + func2.eval();
return func1.toString() + " + " + func2.toString();
public class Sub : Function
public Sub(Function f1, Function f2)
public DoubleWrapper eval()
return func1.eval() - func2.eval();
return func1.toString() + " - " + func2.toString();
public static int plus = 1;
public static int sub = 2;
public static int mult = 3;
public static int div = 4;
public static int op = 1;
public static int num = 2;
public static FileStream outStream;
public static StreamWriter outWriter;
public static TextWriter oldOut = Console.Out;
public static void setOutputStream(string fileName)
outStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);
outWriter = new StreamWriter(outStream);
Console.WriteLine(fileName + " Could not be written");
Console.WriteLine(e.Message);
Console.SetOut(outWriter);
Console.WriteLine("Successfully changed output!");
public static void closeOutputStream()
Console.WriteLine("Output stream back to console.out");
public static void Main()
List<Token> tokens = getTokens();
Console.WriteLine(tokens.Count);
public static List<Token> getTokens()
List<Token> tokens = new List<Token>();
Console.WriteLine("Enter postfix token: ");
string val = Console.ReadLine();
if (double.TryParse(val, out result))
t.Val = Convert.ToDouble(val);