public EvaluatorResult Evaluate(IInterpreterContext context, string expression)
        {
            var    resolver = new FilepathResolver();
            string expr     = resolver.ResolvePath(context, expression);

            switch (LogType)
            {
            case "Log":
                System.Console.Out.WriteLine(expr);
                break;

            case "Info":
                logger.Info(expr);
                break;

            case "Debug":
                logger.Debug(expr);
                break;

            case "Error":
                logger.Error(expr);
                break;

            case "Trace":
                logger.Trace(expr);
                break;

            default:
                break;
            }
            return(new EvaluatorResult(true, string.Empty));
        }
        public EvaluatorResult Evaluate(IInterpreterContext context, string expression)
        {
            var    resolver = new FilepathResolver();
            string expr     = resolver.ResolvePath(context, expression);

            context.Emitter.Open(expr);
            return(new EvaluatorResult(true, string.Empty));
        }
        public EvaluatorResult Evaluate(IInterpreterContext context, string expression)
        {
            var loop = context.EvaluateLoop(expression);

            bool result = loop.HasMore || loop.CurrentModel != null;

            return(new EvaluatorResult(result, string.Empty));
        }
 /// <summary>
 /// Sets an interpreter context to be use un variables resolution.
 /// </summary>
 /// <param name="name">The name of the context..</param>
 /// <param name="interpreterContext">An object that implements Hef.Math.IInterpreterContext. Null to re;ove context.</param>
 public void SetContext(string name, IInterpreterContext interpreterContext)
 {
     if (interpreterContext == null)
     {
         this.namedContext.Remove(name);
     }
     else
     {
         if (!this.namedContext.ContainsKey(name))
         {
             this.namedContext.Add(name, interpreterContext);
         }
         else
         {
             this.namedContext[name] = interpreterContext;
         }
     }
 }
Example #5
0
        public EvaluatorResult Evaluate(IInterpreterContext context, string expression)
        {
            // check for references:
            while (expression.Contains("["))
            {
                // evaluate the sub-expression into the current expression
                expression = EvaluateReferences(context, expression);
            }
            string result = context.EvaluateProperty(expression);

            // check for references in the result:
            while (result.Contains("["))
            {
                // evaluate the sub-expression into the current expression
                result = EvaluateReferences(context, result);
            }

            return(new EvaluatorResult(true, result));
        }
Example #6
0
        /// <summary>
        /// example:
        /// xyz[abc][def[ghi]]
        /// 1) xyz[abc][def[ghi]]
        /// 2) abc][def[ghi]]
        /// 3) def[ghi]]
        /// 4) ghi]] --> refghi
        /// </summary>
        /// <param name="subExpr"></param>
        /// <returns></returns>
        private string EvaluateReferences(IInterpreterContext context, string subExpr)
        {
            var start = subExpr.IndexOf('[');
            var end   = subExpr.IndexOf(']');

            if (subExpr.Substring(start + 1, end - start - 1).Contains("["))
            {
                // we have nested references, resolve this first
                var refres = EvaluateReferences(context, subExpr.Substring(start + 1));

                // add the evaluate sub-expression to the current prefix
                subExpr = subExpr.Substring(0, start + 1) + refres;
                // recalc the end position in the sub-expression of the end of the sub-expression
                end = subExpr.IndexOf(']');
            }
            // evaluate the sub-expression
            var result = Evaluate(context, subExpr.Substring(start + 1, end - start - 1));

            // insert the result in the current sub-expression
            subExpr = subExpr.Substring(0, start) + result.Value + subExpr.Substring(end + 1);

            return(subExpr);
        }
Example #7
0
        public string ResolvePath(IInterpreterContext context, string expression)
        {
            string path = "";
            // split in string and expressions
            int start = 0, xprIndex, xprEnd;

            while (start < expression.Length)
            {
                string walk = expression.Substring(start);
                xprIndex = walk.IndexOf("=<");
                xprEnd   = walk.IndexOf(">");
                if (xprIndex >= 0 && xprEnd > xprIndex)
                {
                    if (xprIndex != 0)
                    {
                        // before the expression
                        list.Add(walk.Substring(0, xprIndex));
                    }
                    // expression itself
                    xprIndex += 2;
                    // evaluate expression
                    var result = context.EvaluateProperty(walk.Substring(xprIndex, xprEnd - xprIndex));

                    list.Add(result);
                    start += xprEnd + 1;
                }
                else
                {
                    list.Add(walk);
                    break;
                }
            }
            // reconstruct result string
            path = list.Aggregate(path, (c, s) => c += s);
            return(path);
        }
Example #8
0
        public EvaluatorResult Evaluate(IInterpreterContext context, string expression)
        {
            string LeftValue;

            try
            {
                if (checkForExistence)
                {
                    var res = context.PropertyExists(leftSide);

                    // just check existence, nothing else, or it does not exist
                    if (res == false || NoRightSide)
                    {
                        if (IsNegate)
                        {
                            res = !res;
                        }
                        return(new EvaluatorResult(res, string.Empty));
                    }
                }
                // existence of property is assumed (it is either checked or no "?" was present
                if (evaluator is Evaluator.ExpressionEvaluator)
                {
                    LeftValue = context.EvaluateProperty(leftSide);
                }
                else
                {
                    var evalRes = evaluator.Evaluate(context, leftSide);
                    if (evalRes.Result == EvaluationResultValues.True)
                    {
                        LeftValue = evalRes.Value;
                    }
                    else
                    {
                        LeftValue = "error";
                    }
                }
            }
            catch (Exception ex)
            {
                return(new EvaluatorResult(ex));
            }

            LeftValue = LeftValue.ToLower();

            bool retVal;

            if (CompareEqual)
            {
                retVal = LeftValue == rightSide;
            }
            else
            {
                retVal = LeftValue != rightSide;
            }
            // leading "!" is valid for the complete if-clause
            if (IsNegate)
            {
                retVal = !retVal;
            }
            return(new EvaluatorResult(retVal, string.Empty));
        }
 public EvaluatorResult Evaluate(IInterpreterContext context, string expression)
 {
     return(new EvaluatorResult(true, (context.EvaluateLoop(expression).Index + 1).ToString()));
 }
 public EvaluatorResult Evaluate(IInterpreterContext context, string expression)
 {
     context.EnterLoop(expression);
     return(new EvaluatorResult(true, string.Empty));
 }
Example #11
0
 public EvaluatorResult Evaluate(IInterpreterContext context, string expression)
 {
     return(new EvaluatorResult(true, expression));
 }
 public EvaluatorResult Evaluate(IInterpreterContext context, string expression)
 {
     return(new EvaluatorResult(true, DateTime.Now.ToString("dd/MMM/yyyy HH:mm:ss")));
 }