예제 #1
0
        private void Process(Token t)
        {
            if (exptFuCallFlag)
            {
                ExcpectFunctionCall(t);
            }

            else if (opBlockFlag)
            {
                if (t.type == Token.Type.Operator && t.lexema == "}")
                {
                    opBlockFlag = false;
                    this.pStack.Push(newblock);
                }
                else
                {
                    newblock.Append(t);
                }
            }
            else
            {
                switch (t.type)
                {
                case Token.Type.Indexer:
                    pStack.Push(int.Parse(t.lexema));
                    CallFunction(new Id("~indexer"));
                    break;

                case Token.Type.Operator:
                    ProcessOperator(t.lexema);
                    break;

                case Token.Type.FunctionCall:
                    CallFunction(new Id(t.lexema));
                    break;

                case Token.Type.String:
                    pStack.Push(t.lexema);
                    break;

                case Token.Type.Double:
                    pStack.Push(Double.Parse(t.lexema));
                    break;

                case Token.Type.Integer:
                    pStack.Push(Double.Parse(t.lexema));
                    break;

                case Token.Type.IdHead:
                    pStack.Push(new Id(t.lexema));
                    break;

                case Token.Type.IdSingle:
                    pStack.Push(new Id(t.lexema));

                    break;

                case Token.Type.IdTail:
                    Id before = (Id)pStack.Peek();
                    before.AddPath(t.lexema);
                    break;

                case Token.Type.EOS:
                    break;
                }
            }
        }