Пример #1
0
        public override object Evaluate(MyContext context)
        {
            MyFunctionDecleration func = context.GetFunctionRVD(Name);

            MyContext ctx = new MyContext();

            ctx.functionsRVD = context.functionsRVD;

            for (int i = 0; i < func.Params.Count ; i++)
            {
                IConvertible value = (IConvertible) Args[i].Evaluate(context);
                string param = func.Params[i];
                ctx.AddVariable(param, value);

                if (i < func.Params.Count - 1)
                {
                    context.AddLog(", ");
                }

                //Debug.WriteLine(Name + "," + param + "=" + value);

                context.AddLog(value.ToString());
            }

            object o = func.Statements.Evaluate(ctx);

            object returnValue = ctx.returnValue;
            ctx.returned = false;

            //Debug.WriteLine(Name + ".returnValue =" + returnValue);

            context.AddLog(ctx.sb.ToString());

            return returnValue;
        }
Пример #2
0
        public override object DoStatement(MyContext context)
        {
            context.AddLog("if cond: ");

            bool cond = (bool)Condition.Evaluate(context);

            context.AddLog(Environment.NewLine);

            object o = null;

            if (cond)
            {
                context.AddLog("then: ");
                o = ThenPart.Evaluate(context);
                context.AddLog(Environment.NewLine);
            }
            else
            {

                if (ElsePart != null)
                {
                    context.AddLog("else: ");
                    o = ElsePart.Evaluate(context);
                    context.AddLog(Environment.NewLine);
                }
                else
                {
                    context.AddLog("nothing: ");
                    context.AddLog("end-if");
                }
            }

            return o;
        }
Пример #3
0
        public override object Evaluate(MyContext context)
        {
            context.AddLog(" ( ");

            context.AddLog(Symbol + " ");

            IConvertible left = (IConvertible)Left.Evaluate(context);
            IConvertible right = (IConvertible)Right.Evaluate(context);

            context.AddLog(" ) ");

            IConvertible result = DoBinOp(left, right);

            return result;
        }
Пример #4
0
        public override object Evaluate(MyContext context)
        {
            context.AddLog("declaring program: " + Name);
            context.AddLog(Environment.NewLine);

            MyContext ctx = new MyContext();

            List(ctx);

            context.AddLog(ctx.ListLog.ToString());

            context.AddLog(Environment.NewLine);

            context.AddProgram(Name, this);
            return 0;
        }
Пример #5
0
        public override object Evaluate(MyContext context)
        {
            IConvertible value = (IConvertible) context.GetVariable(Name);

            context.AddLog(" $" + Name + "[" + value + "] ");

            return value;
        }
Пример #6
0
        public override object DoStatement(MyContext context)
        {
            context.AddLog("returning: ");
            object o = ReturnExpression.Evaluate(context);

            context.returnValue = o;
            context.returned = true;
            //Debug.WriteLine("returning: " + o);

            return o;
        }
Пример #7
0
        public override object DoStatement(MyContext context)
        {
            object o = 0;

            foreach (var statementNode in statements)
            {
                o = statementNode.Evaluate(context);
                context.AddLog(Environment.NewLine);

                if (context.returned)
                {
                    return o;
                }
            }

            return o;
        }
Пример #8
0
        public override object DoStatement(MyContext context)
        {
            context.AddLog(VariableNode.Name + " := ");

            IConvertible value = (IConvertible)ValueNode.Evaluate(context);

            if (!context.ContainsVariable(VariableNode.Name))
            {
                context.AddVariable(VariableNode.Name, value);
            }
            else
            {
                context.SetVariable(VariableNode.Name, value);
            }

            return value;
        }
Пример #9
0
 public override object Evaluate(MyContext context)
 {
     context.AddLog(Value.ToString() + " ");
     return Value;
 }