private static void Main(string[] args) { var lexer = new Lexer(new SimpleMathLexerLanguage()); while (true) { Console.ForegroundColor = ConsoleColor.Gray; Console.Write("> "); string inputExpression = Console.ReadLine() ?? ""; Highlight(lexer, inputExpression); Describe(lexer, inputExpression); MathValue result; try { var expression = SimpleMathExpression.Compile(inputExpression); result = expression.Evaluate(); } catch (Exception exception) { WriteFormattedException(exception); continue; } Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine($"Result: {result}"); } }
public void ImportValues() { var context = new MathContextBuilder() .WithTerm("Width", new StaticValueProvider(10)) .Build(); string syntax = "10 * Width"; var intermediateExpression = SimpleMathExpression.Compile(syntax, context); }
public void LogicOnTerms() { var contextA = new MathContextBuilder() .WithTerm("Level", new StaticValueProvider(15)) .Build(); TestExpression(true, SimpleMathExpression.Compile("2 < Level", contextA)); TestExpression(true, SimpleMathExpression.Compile("15 == Level", contextA)); TestExpression(true, SimpleMathExpression.Compile("16 > Level", contextA)); }
public void OperateComparisons() { TestExpression(true, SimpleMathExpression.Compile("2 > 1")); TestExpression(false, SimpleMathExpression.Compile("1 > 1")); TestExpression(false, SimpleMathExpression.Compile("0 > 1")); TestExpression(true, SimpleMathExpression.Compile("1 >= 1")); TestExpression(false, SimpleMathExpression.Compile("2 <= 1")); TestExpression(true, SimpleMathExpression.Compile("true | 2 < 1")); }
public void OperateEquality() { // Equality Operators TestExpression(true, SimpleMathExpression.Compile("1 == 1")); TestExpression(false, SimpleMathExpression.Compile("1 != 1")); TestExpression(false, SimpleMathExpression.Compile("1 == 10")); TestExpression(true, SimpleMathExpression.Compile("true == true")); TestExpression(false, SimpleMathExpression.Compile("true != true")); TestExpression(true, SimpleMathExpression.Compile("false == false")); TestExpression(false, SimpleMathExpression.Compile("false != false")); }
public void ImportTerms() { var contextA = new MathContextBuilder() .WithTerm("Width", 15) .WithTerm("Height", 10) .Build(); TestExpression(100, SimpleMathExpression.Compile("10 * Height", contextA)); TestExpression(25, SimpleMathExpression.Compile("width + Height", contextA)); TestExpression(25, SimpleMathExpression.Compile("wiDth + heiGHt", contextA)); TestExpression(20, SimpleMathExpression.Compile("Height * 2", contextA)); TestExpression(23, SimpleMathExpression.Compile("3 + Height * 2", contextA)); }
public void OperateMaths() { TestExpression(2, SimpleMathExpression.Compile("3 + -1")); TestExpression(2, SimpleMathExpression.Compile("1 + (1)")); // Add Operator TestExpression(2, SimpleMathExpression.Compile("1 + 1")); TestExpression(2, SimpleMathExpression.Compile("1 + 1")); TestExpression(5, SimpleMathExpression.Compile("((1 + 3) + 1)")); TestExpression(25, SimpleMathExpression.Compile("10+15")); TestExpression(20, SimpleMathExpression.Compile("10 + 10")); TestExpression(25, SimpleMathExpression.Compile("10 + 10 + 5")); // Negative Numbers TestExpression(2, SimpleMathExpression.Compile("3 + -1")); TestExpression(3, SimpleMathExpression.Compile("-1 + 4")); // Subtract Operator TestExpression(2, SimpleMathExpression.Compile("3 - 1")); // Multiply Operator TestExpression(5, SimpleMathExpression.Compile("1 * 5")); TestExpression(20, SimpleMathExpression.Compile("200 * 0.1")); // Divide Operator TestExpression(5, SimpleMathExpression.Compile("10 / 2")); // Power Operator TestExpression(27, SimpleMathExpression.Compile("3 ^ 3")); TestExpression(27, SimpleMathExpression.Compile("3 ^ (1 + 2)")); // Order of Operations Tests TestExpression(-5, SimpleMathExpression.Compile("10 - 10 + 5")); TestExpression(-5, SimpleMathExpression.Compile("10 -(10+ 5)")); TestExpression(5, SimpleMathExpression.Compile("(10 - 10) + 5")); TestExpression(12.564f, SimpleMathExpression.Compile("3.141 * 2^2")); }
public void OperateLogic() { TestExpression(true, SimpleMathExpression.Compile("true")); TestExpression(false, SimpleMathExpression.Compile("false")); // AND Operator TestExpression(true, SimpleMathExpression.Compile("true & true")); TestExpression(false, SimpleMathExpression.Compile("true & false")); TestExpression(false, SimpleMathExpression.Compile("false & true")); TestExpression(false, SimpleMathExpression.Compile("false & false")); // OR Operator TestExpression(true, SimpleMathExpression.Compile("true | true")); TestExpression(true, SimpleMathExpression.Compile("false | true")); TestExpression(true, SimpleMathExpression.Compile("true | false")); TestExpression(false, SimpleMathExpression.Compile("false | false")); // NOT Operator TestExpression(false, SimpleMathExpression.Compile("!true")); TestExpression(true, SimpleMathExpression.Compile("!false")); TestExpression(true, SimpleMathExpression.Compile("!(false)")); TestExpression(false, SimpleMathExpression.Compile("!(30 > 10)")); }
private static void TestExpression(MathValue expected, SimpleMathExpression expression) { Console.WriteLine(expression.ToString() + " = " + expected); Describe(SimpleMathLexerLanguage.Lexer, expression.ToString()); Assert.AreEqual(expected, expression.Evaluate()); }
public void Compile() => SimpleMathExpression.Compile(Expression);
public void CompileBasicLogic() { string syntax = "10 > 5 == true"; var intermediateExpression = SimpleMathExpression.Compile(syntax); }
public void Setup() { evaluateTarget = SimpleMathExpression.Compile(Expression); }
public void CompileBasicMaths() { string syntax = "1 + 1 / 20"; var intermediateExpression = SimpleMathExpression.Compile(syntax); }
public void OrderFromParanthesis() { string syntax = "(10 + 10) ^ 2"; var intermediateExpression = SimpleMathExpression.Compile(syntax); }
public void CompileBranchingExpression() { string syntax = "10 * 10 + 2 * 2"; var intermediateExpression = SimpleMathExpression.Compile(syntax); }
public void Setup() { evaluateTarget = SimpleMathExpression.Compile(Expression); expressionEvaluatorInstance = new ExpressionEvaluator(); }
public void CompileComplexLogicMaths() { string syntax = "1 + (10 / 40) > 1 == true"; var intermediateExpression = SimpleMathExpression.Compile(syntax); }