Certain expressions refer to a user-defined data object and are said to have l-values. Such expressions can appear anywhere that a simple variable name can be used. In particular, such expressions can appear on the lefthand side of assignment statements. In addition, if a formal parameter is passed by reference, its corresponding actual parameter must have an l-value. Both of these cases require l-values because they specify the modification of a memory location.
An expression has an l-value if it is the name of a variable or if it is uses only the following constructs: indices ([ ]) and record fields (.).