예제 #1
0
        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));
        }
예제 #2
0
        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);
        }