variable    : variable
        Feature Type Array adds:
        variable    : variable[expression]
        Feature Type Func adds:
        variable    : variable(arg_list)

def variable(self):
        """
        variable    : variable
        Feature Type Array adds:
        variable    : variable[expression]
        Feature Type Func adds:
        variable    : variable(arg_list)
        """
        var = Var(self.cur_token)
        self.eat(TokenTypes.VAR)
        if Features.TYPE_ARRAY in self.features:
            while self.cur_token.type == TokenTypes.LBRACKET:
                self.eat(TokenTypes.LBRACKET)
                # Start passed the logical ops.
                expr = self.operator_expression(level=2)
                self.eat(TokenTypes.RBRACKET)
                var = GetArrayItem(left=var, right=expr)
        if Features.FUNC in self.features:
            if self.cur_token.type == TokenTypes.LPAREN:
                self.eat(TokenTypes.LPAREN)
                args = self.arg_list()
                self.eat(TokenTypes.RPAREN)
                var = Call(var, args)
        return var