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; }
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; }
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; }
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; }
public override object Evaluate(MyContext context) { IConvertible value = (IConvertible) context.GetVariable(Name); context.AddLog(" $" + Name + "[" + value + "] "); return value; }
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; }
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; }
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; }
public override object Evaluate(MyContext context) { context.AddLog(Value.ToString() + " "); return Value; }