Esempio n. 1
0
        public override RuntimeValueWrapper Execute(DoExpression e, RuntimeContext context)
        {
            RuntimeValueWrapper result     = null;
            RuntimeContext      newContext = new RuntimeContext()
            {
                PreviousContext = context
            };

            foreach (Expression expression in e.Expressions)
            {
                VarExpression var = expression as VarExpression;
                if (var == null)
                {
                    expression.BuildContext(newContext);
                    result = expression.Execute(newContext);
                }
                else
                {
                    result = new RuntimeValueWrapper(new RuntimeUnevaluatedValue(var.Expression), context);
                    if (!var.Pattern.Match(context, result))
                    {
                        throw new Exception("模式匹配不成功。");
                    }
                }
            }
            if (result == null)
            {
                return(RuntimeValueWrapper.CreateValue(new object()));
            }
            else
            {
                return(result);
            }
        }
Esempio n. 2
0
 public static RuntimeValueWrapper ReturnStateMonadValue(RuntimeValueWrapper[] arguments)
 {
     return(RuntimeValueWrapper.CreateValue(new StatePackage()
     {
         result = arguments[0],
         state = arguments[1]
     }));
 }
 public override RuntimeValueWrapper Execute(RuntimeContext context)
 {
     return(RuntimeValueWrapper.CreateValue(
                Elements
                .Take(Elements.Count - 1)
                .Select(e => new RuntimeValueWrapper(new RuntimeUnevaluatedValue(e), context))
                .Union((RuntimeValueWrapper[])Elements.Last().Execute(context).RuntimeObject)
                .ToArray()
                ));
 }
Esempio n. 4
0
        public override RuntimeValueWrapper Execute(DoExpression e, RuntimeContext context)
        {
            Func <RuntimeValueWrapper[], RuntimeValueWrapper> monadFunction = arguments =>
            {
                StatePackage result = new StatePackage()
                {
                    result = null,
                    state  = arguments[0]
                };
                RuntimeContext newContext = new RuntimeContext()
                {
                    PreviousContext = context
                };
                newContext.Values.Add("return", RuntimeValueWrapper.CreateFunction(ReturnStateMonadValue, 2));
                foreach (Expression expression in e.Expressions)
                {
                    VarExpression var = expression as VarExpression;
                    if (var == null)
                    {
                        expression.BuildContext(newContext);
                        result = RunStateMonad(new RuntimeValueWrapper(new RuntimeUnevaluatedValue(expression), newContext), result.state);
                    }
                    else
                    {
                        result = RunStateMonad(new RuntimeValueWrapper(new RuntimeUnevaluatedValue(var.Expression), newContext), result.state);
                        if (!var.Pattern.Match(newContext, result.result))
                        {
                            throw new Exception("模式匹配不成功。");
                        }
                    }
                    if (!(bool)continueFunction.Invoke(result.state).RuntimeObject)
                    {
                        break;
                    }
                }
                if (result.result == null)
                {
                    result.result = RuntimeValueWrapper.CreateValue(new object());
                }
                return(RuntimeValueWrapper.CreateValue(result));
            };

            return(RuntimeValueWrapper.CreateFunction(monadFunction, 1));
        }
Esempio n. 5
0
        public override RuntimeValueWrapper Execute(DoExpression e, RuntimeContext context)
        {
            RuntimeContext newContext = new RuntimeContext()
            {
                PreviousContext = context
            };

            foreach (Expression expression in e.Expressions)
            {
                expression.BuildContext(newContext);
            }
            if (e.Expressions.Count > 0)
            {
                return(new RuntimeValueWrapper(new RuntimeUnevaluatedValue(e.Expressions.Last()), newContext));
            }
            else
            {
                return(RuntimeValueWrapper.CreateValue(new object()));
            }
        }
 public override bool Match(RuntimeContext context, RuntimeValueWrapper valueWrapper)
 {
     if (!valueWrapper.IsInvokable)
     {
         RuntimeValueWrapper[] valueWrappers = valueWrapper.RuntimeObject as RuntimeValueWrapper[];
         if (valueWrappers.Length >= Elements.Count - 1)
         {
             for (int i = 0; i < Elements.Count - 1; i++)
             {
                 if (!Elements[i].Match(context, valueWrappers[i]))
                 {
                     return(false);
                 }
             }
             return(Elements[Elements.Count - 1].Match(
                        context,
                        RuntimeValueWrapper.CreateValue(valueWrappers.Skip(Elements.Count - 1).ToArray())
                        ));
         }
     }
     return(base.Match(context, valueWrapper));
 }
 public override RuntimeValueWrapper Execute(RuntimeContext context)
 {
     return(RuntimeValueWrapper.CreateValue(
                Elements.Select(e => new RuntimeValueWrapper(new RuntimeUnevaluatedValue(e), context)).ToArray()
                ));
 }
 public override RuntimeValueWrapper Execute(RuntimeContext context)
 {
     return(RuntimeValueWrapper.CreateValue(new Flag(Name)));
 }
Esempio n. 9
0
 public static ScriptingValue CreateValue(object o)
 {
     return(new ScriptingValue(RuntimeValueWrapper.CreateValue(o)));
 }
Esempio n. 10
0
 public virtual RuntimeValueWrapper Execute(RuntimeContext context)
 {
     return(RuntimeValueWrapper.CreateValue(new object()));
 }