/// <summary> /// Execute this script. /// </summary> /// <param name="r">The current memory.</param> /// <param name="args">The arguments.</param> /// <returns>The resulting return.</returns> public object Execute(RAM r, object[] args) { if (args.Length != ArgCount) { throw new ArgumentException(); } r.PushNewLocalMemory(); var i = 0; foreach (var a in args) { var farg = r.GetValue(a); if (float.TryParse(farg.ToString(), out float f)) { r.SetLocal(_ArgNames[i++], f); } else { r.SetLocal(_ArgNames[i++], farg); } } var obj = BrackInterpreter.Execute(r, _Brack); r.RemoveLastLocalMemory(); return(obj); }
static void Main() { var curRam = new RAM(new OperationSet(new BrackOperatorBase[] { new BrackParamOperator <float>("add", (r, args) => { var ret = 0f; foreach (var f in args) { ret += f; } return(ret); }), new BrackOperator <string>("print", (r, str) => { Console.WriteLine(str); return(str); }), })); BrackInterpreter.ExecuteRaw(curRam, "TestScript.brak", true); Console.ReadKey(); }