##### 15.4.6.1 Operators

Operators must be defined on values of specific types. For instance,
`+`

is defined on numbers, but not on structures. Operators are
often defined on groups of types. For the purposes of Modula-2, the
following definitions hold:

*Integral types*consist of`INTEGER`

,`CARDINAL`

, and their subranges.*Character types*consist of`CHAR`

and its subranges.*Floating-point types*consist of`REAL`

.*Pointer types*consist of anything declared as`POINTER TO`

`type`.*Scalar types*consist of all of the above.*Set types*consist of`SET`

and`BITSET`

types.*Boolean types*consist of`BOOLEAN`

.

The following operators are supported, and appear in order of increasing precedence:

`,`

- Function argument or array index separator.
`:=`

- Assignment. The value of
`var``:=`

`value`is`value`. `<`

,`>`

- Less than, greater than on integral, floating-point, or enumerated
types.
`<=`

,`>=`

- Less than or equal to, greater than or equal to
on integral, floating-point and enumerated types, or set inclusion on
set types. Same precedence as
`<`

. `=`

,`<>`

,`#`

- Equality and two ways of expressing inequality, valid on scalar types.
Same precedence as
`<`

. In gdb scripts, only`<>`

is available for inequality, since`#`

conflicts with the script comment character. `IN`

- Set membership. Defined on set types and the types of their members.
Same precedence as
`<`

. `OR`

- Boolean disjunction. Defined on boolean types.
`AND`

,`&`

- Boolean conjunction. Defined on boolean types.
`@`

- The gdb “artificial array” operator (see Expressions).
`+`

,`-`

- Addition and subtraction on integral and floating-point types, or union
and difference on set types.
`*`

- Multiplication on integral and floating-point types, or set intersection
on set types.
`/`

- Division on floating-point types, or symmetric set difference on set
types. Same precedence as
`*`

. `DIV`

,`MOD`

- Integer division and remainder. Defined on integral types. Same
precedence as
`*`

. `-`

- Negative. Defined on
`INTEGER`

and`REAL`

data. `^`

- Pointer dereferencing. Defined on pointer types.
`NOT`

- Boolean negation. Defined on boolean types. Same precedence as
`^`

. `.`

`RECORD`

field selector. Defined on`RECORD`

data. Same precedence as`^`

.`[]`

- Array indexing. Defined on
`ARRAY`

data. Same precedence as`^`

. `()`

- Procedure argument list. Defined on
`PROCEDURE`

objects. Same precedence as`^`

. `::`

,`.`

- gdb and Modula-2 scope operators.

Warning:Set expressions and their operations are not yet supported, so gdb treats the use of the operator`IN`

, or the use of operators`+`

,`-`

,`*`

,`/`

,`=`

, ,`<>`

,`#`

,`<=`

, and`>=`

on sets as an error.