code: def variable(self):
          
          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
docs: variable    : variable
          Feature Type Array adds:
          variable    : variable[expression]
          Feature Type Func adds:
          variable    : variable(arg_list)