public IActionResult EvaluateExpression([FromBody, SwaggerRequestBody("The request that contains the expression and variables")] ExpressionRequest request) { if (!this.ModelState.IsValid) { this.logger.LogError("This model doesn't look right to me!"); throw new ArgumentException("Your request body wasn't proper! "); } this.logger.LogInformation($"All looks good. Let's start parsing: {request.Expression}."); MathExpressionBuilder builder = new MathExpressionBuilder(request.Expression); IMathExpression parsedExpression = builder.GenerateExpression(); this.logger.LogDebug("Yup. Looks like a legit expression."); foreach (var variable in request.VariableEntries) { builder.SetVariable(variable.Name, variable.Value.ToString()); this.logger.LogDebug("Setting variable {0} with {1}", variable.Name, variable.Value); } ExpressionResponse response = new ExpressionResponse { AdjustedExpression = parsedExpression.ToString(), Expression = request.Expression, VariableEntries = request.VariableEntries, ValueGenerated = parsedExpression.EvaluateExpression() }; return(this.Ok(response)); }
static void Main(string[] args) { foreach (var requests in args) { string[] commandItems = requests.Split(';'); if (commandItems.Length == 0) { continue; } string expression = commandItems[0]; MathFun.ExpressionBuilder.MathExpressionBuilder mathExpressionBuilder = new ExpressionBuilder.MathExpressionBuilder(expression); IMathExpression mathExpression = mathExpressionBuilder.GenerateExpression(); Console.WriteLine($"The expression parsed was {mathExpression.ToString()}"); if (mathExpressionBuilder.ContainsVariables) { foreach (var variableCommand in commandItems) { string[] commandSubparts = variableCommand.Split("="); if (commandSubparts.Length != 2) { continue; } string variableName = commandSubparts[0]; string value = commandSubparts[1]; mathExpressionBuilder.SetVariable(variableName, value); Console.WriteLine($"{variableName}={value}"); } } Console.WriteLine($"The expression evaluated {mathExpression.EvaluateExpression()}"); } }