public static boolean accept(AbstractSyntaxNode node, TokenReader reader)
    {
        boolean result = false;
        
        if (reader.accept(Token.IF))
        {
            final IfStatement ifStatement = new IfStatement();
            
            reader.expect(Token.OPEN_PAREN, "if condition start");
            Condition.accept(ifStatement, reader);
            reader.expect(Token.CLOSE_PAREN, "if condition end");
            Block.accept(ifStatement, reader);
            
            if (reader.accept(Token.ELSE))
            {
                if (!IfStatement.accept(ifStatement, reader)
                        && !Block.accept(ifStatement, reader))
                {
                    Context.error("Else block expected");
                }
            }
            
            node.addChild(ifStatement);
            
            result = true;
        }
        
        return result;
    }