private string getarg(ref string src) { if (src == "") { return(src); } dynamic d = src.Split(new char[] { ' ' }, 2); while (isNamed(d[0])) { d[0] = _code[d[0]]; if (2 == d.Length) { d[0] = d[0] + d[1]; } d = d[0].Split(new char[] { ' ' }, 2); } if (d.Length == 1) { return(src); } else { src = d[1]; } E_FUNC eFunc = FuncSel(d[0]); return((eFunc != E_FUNC.Ap) ? d[0] : Exec[(int)eFunc].iFunc(ref src)); }
private E_FUNC FuncSel(string item) { E_FUNC eRet = E_FUNC.Nop; /* 名前付き関数のとき */ if (isNamed(item)) { return(E_FUNC.Nop); } /* 数値のとき */ int output; bool result = Int32.TryParse(item, out output); if (result) { return(E_FUNC.Nop); } /* 関数のとき */ switch (item) { case "inc": /* 未使用 */ eRet = E_FUNC.Succ; break; case "dec": /* 未使用 */ eRet = E_FUNC.Decc; break; case "add": eRet = E_FUNC.Sum; break; case "mul": eRet = E_FUNC.Prod; break; case "div": eRet = E_FUNC.Div; break; case "eq": eRet = E_FUNC.Eq; break; case "lt": eRet = E_FUNC.Lt; break; case "mod": /* 未使用 */ eRet = E_FUNC.Mod; break; case "dem": /* 未使用 */ eRet = E_FUNC.Dem; break; case "send": /* 未使用 */ eRet = E_FUNC.Send; break; case "neg": eRet = E_FUNC.Neg; break; case "ap": eRet = E_FUNC.Ap; break; case "s": eRet = E_FUNC.S; break; case "c": eRet = E_FUNC.C; break; case "b": eRet = E_FUNC.B; break; case "t": eRet = E_FUNC.T; break; case "f": eRet = E_FUNC.F; break; case "pwr2": /* 未使用 */ eRet = E_FUNC.Pow2; break; case "i": eRet = E_FUNC.I; break; case "cons": eRet = E_FUNC.Cons; break; case "car": eRet = E_FUNC.Car; break; case "cdr": eRet = E_FUNC.Cdr; break; case "nil": eRet = E_FUNC.Nil; break; case "isnil": eRet = E_FUNC.IsNil; break; case "vec": /* 未使用 */ eRet = E_FUNC.Vec; break; case "draw": /* 未使用 */ eRet = E_FUNC.Draw; break; case "checkerboard": /* 未使用 */ eRet = E_FUNC.Checker; break; case "multipledraw": /* 未使用 */ eRet = E_FUNC.MDraw; break; case "if0": /* 未使用 */ eRet = E_FUNC.IsZero; break; case "interact": /* 未使用 */ eRet = E_FUNC.Interact; break; case "default": eRet = E_FUNC.Nop; break; } return(eRet); }