Ejemplo n.º 1
0
        private static ASTNode ParseElse()
        {
            ASTNode branching;
            ASTNode body;

            GetNextToken();

            if (curTok.token == Tokens.Token.K_IF)
            {
                bufferTok.token = Tokens.Token.K_ELSE_IF;
                return(new ElseAST(ParseIf()));
            }
            else if (curTok.token == Tokens.Token.BRACE_L)
            {
                return(new ElseAST(new BodyMethodAST(ParseBrace(Area.METHOD, isCycleArea))));
            }
            else
            {
                if (bufferTok.token == Tokens.Token.K_ELSE)
                {
                    ConsoleHelper.WriteErrorAST("Expected 'else if' or 'if'", curTok.y, curTok.x);
                }
                isRawToken = true;
                body       = MemberMethod(false);
                branching  = new ConditionNodeAST(null, body);
            }
            return(new ElseAST(branching));
        }
Ejemplo n.º 2
0
        //---------------------
        // Парсер if
        //---------------------

        public static ASTNode ParseIf()
        {
            ASTNode branching;

            GetNextToken();

            ASTNode condition = null;

            if (curTok.token == Tokens.Token.PARENTHESIS_L)
            {
                condition = ParseConditionIf();
                GetNextToken();
            }
            else
            {
                ConsoleHelper.WriteErrorAST("Expected '('", curTok.y, curTok.x);
                SkipToToken(Tokens.Token.BRACE_L);
            }
            ASTNode bodyIf;

            if (curTok.token == Tokens.Token.BRACE_L)
            {
                bodyIf    = new BodyMethodAST(ParseBrace(Area.METHOD, isCycleArea));
                branching = new ConditionNodeAST(condition, bodyIf);
            }
            else
            {
                isRawToken = true;
                bodyIf     = MemberMethod(isCycleArea);
                branching  = new ConditionNodeAST(condition, bodyIf);
            }
            return(new IfAST(branching));
        }