Skip to content

Instantly share code, notes, and snippets.

@MykolaBalakin
Last active December 9, 2015 13:48
Show Gist options
  • Save MykolaBalakin/0bb9b6723eae0826df40 to your computer and use it in GitHub Desktop.
Save MykolaBalakin/0bb9b6723eae0826df40 to your computer and use it in GitHub Desktop.
Simple calculator on C# writen without using any arithmetic operator
var variable = Expression.Variable(typeof(String[]));
Expression.Lambda(
Expression.Loop(
Expression.Block(
new[] { variable },
Expression.Call(typeof(Console), "Write", Type.EmptyTypes, Expression.Constant('>')),
Expression.Call(typeof(Console), "Write", Type.EmptyTypes, Expression.Constant(' ')),
Expression.Assign(variable,
Expression.Call(
Expression.Call(typeof(Console), "ReadLine", Type.EmptyTypes),
"Split",
Type.EmptyTypes,
Expression.NewArrayInit(typeof(Char), Expression.Constant(' '))
)
),
Expression.Switch(
Expression.ArrayAccess(variable, Expression.Constant(1)),
Expression.SwitchCase(
Expression.Call(typeof(Console), "WriteLine", Type.EmptyTypes,
Expression.Add(
Expression.Call(typeof(Double), "Parse", Type.EmptyTypes, Expression.ArrayAccess(variable, Expression.Constant(0))),
Expression.Call(typeof(Double), "Parse", Type.EmptyTypes, Expression.ArrayAccess(variable, Expression.Constant(2)))
)
),
Expression.Constant("+")
),
Expression.SwitchCase(
Expression.Call(typeof(Console), "WriteLine", Type.EmptyTypes,
Expression.Subtract(
Expression.Call(typeof(Double), "Parse", Type.EmptyTypes, Expression.ArrayAccess(variable, Expression.Constant(0))),
Expression.Call(typeof(Double), "Parse", Type.EmptyTypes, Expression.ArrayAccess(variable, Expression.Constant(2)))
)
),
Expression.Constant("-")
),
Expression.SwitchCase(
Expression.Call(typeof(Console), "WriteLine", Type.EmptyTypes,
Expression.Multiply(
Expression.Call(typeof(Double), "Parse", Type.EmptyTypes, Expression.ArrayAccess(variable, Expression.Constant(0))),
Expression.Call(typeof(Double), "Parse", Type.EmptyTypes, Expression.ArrayAccess(variable, Expression.Constant(2)))
)
),
Expression.Constant("*")
),
Expression.SwitchCase(
Expression.Call(typeof(Console), "WriteLine", Type.EmptyTypes,
Expression.Divide(
Expression.Call(typeof(Double), "Parse", Type.EmptyTypes, Expression.ArrayAccess(variable, Expression.Constant(0))),
Expression.Call(typeof(Double), "Parse", Type.EmptyTypes, Expression.ArrayAccess(variable, Expression.Constant(2)))
)
),
Expression.Constant("/")
)
),
Expression.Call(typeof(Console), "WriteLine", Type.EmptyTypes)
)
)
).Compile().DynamicInvoke();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment