예제 #1
0
        void ProcessCallIf()
        {
            CodeIf code = (CodeIf)m_scriptInstruction.Operand0;

            if (ProcessCondition(code.If, Executable_Block.If))
            {
                return;
            }
            int length = code.ElseIf.Count;

            for (int i = 0; i < length; ++i)
            {
                if (ProcessCondition(code.ElseIf[i], Executable_Block.If))
                {
                    return;
                }
            }
            ProcessCondition(code.Else, Executable_Block.If);
        }
예제 #2
0
        //解析if(判断语句)
        private void ParseIf()
        {
            CodeIf ret = new CodeIf();

            ret.If = ParseCondition(true, Executable_Block.If);
            List <TempCondition> ElseIf = new List <TempCondition>();

            for (; ;)
            {
                Token token = ReadToken();
                if (token.Type == TokenType.ElseIf)
                {
                    ElseIf.Add(ParseCondition(true, Executable_Block.If));
                }
                else if (token.Type == TokenType.Else)
                {
                    if (PeekToken().Type == TokenType.If)
                    {
                        ReadToken();
                        ElseIf.Add(ParseCondition(true, Executable_Block.If));
                    }
                    else
                    {
                        UndoToken();
                        break;
                    }
                }
                else
                {
                    UndoToken();
                    break;
                }
            }
            if (PeekToken().Type == TokenType.Else)
            {
                ReadToken();
                ret.Else = ParseCondition(false, Executable_Block.If);
            }
            ret.Init(ElseIf);
            m_scriptExecutable.AddScriptInstruction(new ScriptInstruction(Opcode.CALL_IF, ret));
        }
예제 #3
0
        void ProcessCallIf()
        {
            CodeIf code = (CodeIf)m_scriptInstruction.Operand0;

            if (ProcessAllow(code.If))
            {
                ProcessCondition(code.If);
                return;
            }
            foreach (TempCondition ElseIf in code.ElseIf)
            {
                if (ProcessAllow(ElseIf))
                {
                    ProcessCondition(ElseIf);
                    return;
                }
            }
            if (code.Else != null && ProcessAllow(code.Else))
            {
                ProcessCondition(code.Else);
            }
        }
예제 #4
0
        private void ParseIf()
        {
            Token  token;
            CodeIf @if = new CodeIf {
                If = this.ParseCondition(true, Executable_Block.If)
            };
            List <TempCondition> elseIf = new List <TempCondition>();

Label_001A:
            token = this.ReadToken();
            if (token.Type == Scorpio.Compiler.TokenType.ElseIf)
            {
                elseIf.Add(this.ParseCondition(true, Executable_Block.If));
                goto Label_001A;
            }
            if (token.Type == Scorpio.Compiler.TokenType.Else)
            {
                if (this.PeekToken().Type == Scorpio.Compiler.TokenType.If)
                {
                    this.ReadToken();
                    elseIf.Add(this.ParseCondition(true, Executable_Block.If));
                    goto Label_001A;
                }
                this.UndoToken();
            }
            else
            {
                this.UndoToken();
            }
            if (this.PeekToken().Type == Scorpio.Compiler.TokenType.Else)
            {
                this.ReadToken();
                @if.Else = this.ParseCondition(false, Executable_Block.If);
            }
            @if.Init(elseIf);
            this.m_scriptExecutable.AddScriptInstruction(new ScriptInstruction(Opcode.CALL_IF, @if));
        }
예제 #5
0
        private void ProcessCallIf()
        {
            CodeIf @if = (CodeIf)this.m_scriptInstruction.operand0;

            if (this.ProcessAllow(@if.If))
            {
                this.ProcessCondition(@if.If);
            }
            else
            {
                foreach (TempCondition condition in @if.ElseIf)
                {
                    if (this.ProcessAllow(condition))
                    {
                        this.ProcessCondition(condition);
                        return;
                    }
                }
                if ((@if.Else != null) && this.ProcessAllow(@if.Else))
                {
                    this.ProcessCondition(@if.Else);
                }
            }
        }