11,487,406 members (71,640 online)
alternative version

# Yet Another Math Parser (YAMP)

, 30 Sep 2012 CPOL 42.7K 1.8K 87
Constructing a fast math parser using Reflection to do numerics like Matlab.
 ```using System; namespace YAMP { abstract class LogicOperator : BinaryOperator { public LogicOperator (string op) : base(op, 3) { } public abstract ScalarValue Compare(ScalarValue left, ScalarValue right); public override Value Perform (Value left, Value right) { if(!(left is ScalarValue || left is MatrixValue)) throw new OperationNotSupportedException(Op, left); if(!(right is ScalarValue || right is MatrixValue)) throw new OperationNotSupportedException(Op, right); if(left is ScalarValue && right is ScalarValue) { return Compare (left as ScalarValue, right as ScalarValue); } else if(left is MatrixValue && right is ScalarValue) { var l = left as MatrixValue; var r = right as ScalarValue; var m = new MatrixValue(l.DimensionY, l.DimensionX); for(var i = 1; i <= m.DimensionX; i++) for(var j = 1; j <= m.DimensionY; j++) m[j, i] = Compare(l[j, i], r); return m; } else if(left is ScalarValue && right is MatrixValue) { var l = left as ScalarValue; var r = right as MatrixValue; var m = new MatrixValue(r.DimensionY, r.DimensionX); for(var i = 1; i <= m.DimensionX; i++) for(var j = 1; j <= m.DimensionY; j++) m[j, i] = Compare(l, r[j, i]); return m; } else { var l = left as MatrixValue; var r = right as MatrixValue; if(l.DimensionX != r.DimensionX) throw new DimensionException(l.DimensionX, r.DimensionX); if(l.DimensionY != r.DimensionY) throw new DimensionException(l.DimensionY, r.DimensionY); var m = new MatrixValue(l.DimensionY, l.DimensionX); for(var i = 1; i <= m.DimensionX; i++) for(var j = 1; j <= m.DimensionY; j++) m[j, i] = Compare(l[j, i], r[j, i]); return m; } } } } ```

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.