public Parser(string text, ExecFuncEvaluator exec_func_evaluator, IVariableValueResolver compile_time_constants, bool consume_whole_text) { m_Tokenizer = new Tokenizer.Tokenizer(text); m_ExecFuncEvaluator = exec_func_evaluator; m_CompileTimeConstants = compile_time_constants == null ? (IVariableValueResolver) new VariableValueResolver() : compile_time_constants; m_ConsumeWholeText = consume_whole_text; }
protected internal override Value EliminateConstSubExpressions(Private.ConstEvalContext ctx) { Value cond_expr = TryEliminateConstSubExpressions(ctx, SubExpressions[0]); if (cond_expr == null) { Value true_expr = TryEliminateConstSubExpressions(ctx, SubExpressions[1]); if (true_expr != null) { SubExpressions[1] = true_expr; } Value false_expr = TryEliminateConstSubExpressions(ctx, SubExpressions[2]); if (false_expr != null) { SubExpressions[2] = false_expr; } return(null); } bool cond = cond_expr.ToBool(); IVariableValueResolver local_ctx = SubExpressions[0].GetLocalContext(); SubExpressions[0] = new BoolValueWithLocalContext(cond, local_ctx); if (local_ctx != null) { ctx.PushLocalContext(local_ctx); } try { Value v = TryEliminateConstSubExpressions(ctx, cond ? SubExpressions[1] : SubExpressions[2]); if (v != null) { return(v); } if (cond) { SubExpressions[2] = null; } else { SubExpressions[1] = null; } } finally { if (local_ctx != null) { ctx.PopLocalContext(); } } return(null); }
public virtual Value GetVariableValue(Variable variable) { Value v; if (m_LocalContextStack.Count > 0) { IVariableValueResolver local_ctx = m_LocalContextStack.Peek(); if (local_ctx != null) { v = local_ctx.GetVariableValue(variable); if (v != null) { return(v); } } } throw new NotConstExpression(variable); }
protected internal override Value RecursiveCollectUnresolvedVariables(IEvalContext ctx) { Expression expr_ctx, expr_no_ctx; if (SubExpressions[0].RecursiveCollectUnresolvedVariables(ctx).ToBool()) { expr_ctx = SubExpressions[1]; expr_no_ctx = SubExpressions[2]; } else { expr_ctx = SubExpressions[2]; expr_no_ctx = SubExpressions[1]; } if (expr_ctx != null) { IVariableValueResolver local_ctx = SubExpressions[0].GetLocalContext(); if (local_ctx == null) { expr_ctx.RecursiveCollectUnresolvedVariables(ctx); } else { ctx.PushLocalContext(local_ctx); try { expr_ctx.RecursiveCollectUnresolvedVariables(ctx); } finally { ctx.PopLocalContext(); } } } if (expr_no_ctx != null) { expr_no_ctx.RecursiveCollectUnresolvedVariables(ctx); } return(new BoolValue(false)); }
public override Value Evaluate(IEvalContext ctx) { Expression expr = SubExpressions[0].Evaluate(ctx).ToBool() ? SubExpressions[1] : SubExpressions[2]; IVariableValueResolver local_ctx = SubExpressions[0].GetLocalContext(); if (local_ctx == null) { return(expr.Evaluate(ctx)); } else { ctx.PushLocalContext(local_ctx); try { Value res = expr.Evaluate(ctx); return(res); } finally { ctx.PopLocalContext(); } } }
public virtual Value GetVariableValue(Variable variable) { Value v; if (m_LocalContextStack.Count > 0) { IVariableValueResolver local_ctx = m_LocalContextStack.Peek(); if (local_ctx != null) { v = local_ctx.GetVariableValue(variable); if (v != null) { return(v); } } } if (m_VariableValues.TryGetValue(variable.Name, out v)) { return(v); } return(null); }
public Parser(string text, ExecFuncEvaluator exec_func_evaluator, IVariableValueResolver compile_time_constants) : this(text, exec_func_evaluator, compile_time_constants, true) { }
public CompiledExpressionCache(ExecFuncEvaluator exec_func_evaluator, IVariableValueResolver compile_time_constants, int max_size) { m_Cache = new Cache <string, CompiledExpression>(CompileExpression, max_size); m_ExecFuncEvaluator = exec_func_evaluator; m_CompileTimeConstants = compile_time_constants; }
public CompiledExpressionCache(ExecFuncEvaluator exec_func_evaluator, IVariableValueResolver compile_time_constants, int max_size) { m_Cache = new Cache<string, CompiledExpression>(CompileExpression, max_size); m_ExecFuncEvaluator = exec_func_evaluator; m_CompileTimeConstants = compile_time_constants; }
public BoolValueWithLocalContext(bool val, IVariableValueResolver local_ctx) : base(val) { m_LocalCtx = local_ctx; }
public virtual void PushLocalContext(IVariableValueResolver local_ctx) { Debug.Assert(local_ctx != null); m_LocalContextStack.Push(local_ctx); }
public virtual void PushLocalContext(IVariableValueResolver local_ctx) { m_Ctx.PushLocalContext(local_ctx); }
public Parser(string text, ExecFuncEvaluator exec_func_evaluator, IVariableValueResolver compile_time_constants, bool consume_whole_text) { m_Tokenizer = new Tokenizer.Tokenizer(text); m_ExecFuncEvaluator = exec_func_evaluator; m_CompileTimeConstants = compile_time_constants==null ? (IVariableValueResolver)new VariableValueResolver() : compile_time_constants; m_ConsumeWholeText = consume_whole_text; }