An expression is either atomic, consisting of a literal constant or attribute reference, or it is a composite expression, composed of an operator applied to one or more operands. A literal constant is an integer, real, string, absolute time, or relative time literal, or one of the values true, false, error, or undefined. An attribute reference has an associated character string, such as size or n123, called an attribute name. Operators include the familiar arithmetic, logical, and comparison operators of C, C++, or Java (such as +, &&, and <=), calls to functions (such as substring(x, 1, 3) or member(x,l)), operators for constructing lists: {expr1 , ... , exprn }, and records: [ name1 = expr1 ; ... ; namen = exprn ], the subscript operator: expr1 [ expr2 ], and the attribute-selection operator: expr . name.