Пример #1
0
        public static ElseIfBlock Parse(TokenList _tokens)
        {
            ElseIfBlock ret = null;
            Symbol      op  = 0;

            if (_tokens.PeekToken().TokenName == Lexer.Tokens.LeftParan)
            {
                _tokens.Pos++;
            }

            Expr lexpr = Expr.Parse(_tokens);

            if (_tokens.PeekToken().TokenName == Lexer.Tokens.DoubleEqual)
            {
                op = Symbol.doubleEqual;
                _tokens.Pos++;
            }
            else if (_tokens.PeekToken().TokenName == Lexer.Tokens.NotEqual)
            {
                op = Symbol.notEqual;
                _tokens.Pos++;
            }

            Expr rexpr = Expr.Parse(_tokens);

            if (_tokens.PeekToken().TokenName == Lexer.Tokens.RightParan)
            {
                _tokens.Pos++;
            }

            ret = new ElseIfBlock(lexpr, op, rexpr);

            return(ret);
        }
Пример #2
0
        private void CompileElseIf(ElseIfBlock data)
        {
            CompileExpr(data.LeftExpr);
            CompileExpr(data.RightExpr);

            if (data.Op == Symbol.doubleEqual)
            {
                Write("elseife");
            }
            else if (data.Op == Symbol.notEqual)
            {
                Write("elseifn");
            }

            CompileStmtList(data.Statements);
        }