|
As the previous section states, the HLA CTL supports constant expressions in the CTL assignment statement. Unlike the run-time language (where you have to translate algebraic notation into a sequence of machine instructions), the HLA CTL allows a full set of arithmetic operations using familiar expression syntax. This gives the HLA CTL considerable power, especially when combined with the built-in compile time functions the next section discusses.
Tables 10-1 and 10-2 list operators that the HLA CTL supports in compile time expressions.
| Operator(s) | Operand Types[1] | Description |
|---|---|---|
| - (unary) | numeric | Negates the specific numeric value (int, uns, real). |
| cset | Returns the complement of the specified character set. | |
| ! (unary) | integer | Inverts all the bits in the operand (bitwise NOT). |
| boolean | Boolean NOT of the operand. | |
| * | numericL * numericR | Multiplies the two operands. |
| csetL * csetR | Computes the intersection of the two sets. | |
| div | integerL div integerR | Computes the integer quotient of the two integer (int/uns/dword) operands. |
| mod | integerL mod integerR | Computes the remainder of the division of the two integer (int/uns/dword) operands. |
| / | numericL / numericR | Computes the real quotient of the two numeric operands. Returns a real result even if both operands are integers. |
| << | integerL << integerR | Shifts integerL operand to the left the number of bits specified by the integerR operand. |
| >> | integerL >> integerR | Shifts integerL operand to the right the number of bits specified by the integerR operand. |
| + | numericL + numericR | Adds the two numeric operands. |
| csetL + csetR | Computes the union of the two sets. | |
| strL + strR | Concatenates the two strings. | |
| − | numericL − numericR | Computes the difference between numericL and numericR. |
| csetL − csetR | Computes the set difference of csetL-csetR. | |
| = or == | numericL = numericR | Returns true if the two operands have the same value. |
| csetL = csetR | Returns true if the two sets are equal. | |
| strL = strR | Returns true if the two strings/chars are equal. | |
| typeL = typeR | Returns true if the two values are equal. They must be the same type. | |
| <> or != | typeL <> typeR (same as =) | Returns false if the two (compatible) operands are not equal to one another. |
| < | numericL < numericR | Returns true if numericL is less than numericR. |
| csetL < csetR | Returns true if csetL is a proper subset of csetR. | |
| strL < strR | Returns true if strL is less than strR. | |
| booleanL < booleanR | Returns true if left operand is less than right operand (note: false < true). | |
| enumL < enumR | Returns true if enumL appears in the same enum list as enumR and enumL appears first. | |
| <= | Same as < | Returns true if the left operand is less than or equal to the right operand. For character sets, this means that the left operand is a subset of the right operand. |
| > | Same as < | Returns true if the left operand is greater than the right operand. For character sets, this means that the left operand is a proper superset of the right operand. |
| >= | Same as <= | Returns true if the left operand is greater than or equal to the right operand. For character sets, this means that the left operand is a superset of the right operand. |
| & | integerL & integerR | Computes the logical AND of the two operands. |
| booleanL & booleanR | Computes the bitwise AND of the two operands. | |
| | | integerL | integerR | Computes the bitwise OR of the two operands. |
| booleanL | booleanR | Computes the logical OR of the two operands. | |
| ^ | integerL ^ integerR | Computes the bitwise XOR of the two operands. |
| booleanL ^ booleanR | Computes the logical XOR of the two operands. Note that this is equivalent to "booleanL <> booleanR." | |
| in | charL in csetR | Returns true if charL is a member of csetR. |
|
[1]Numeric is {intXX, unsXX, byte, word, dword, and realXX} values. cset is a character set operand. Type integer is { intXX, unsXX, byte, word, dword }. Type str is any string or character value. "TYPE" indicates an arbitrary HLA type. Other types specify an explicit HLA data type. | ||
| Associativity | Precedence (Highest to Lowest) | Operator |
|---|---|---|
| Right to left | 6 | ! (unary) |
| - (unary) | ||
| Left to right | 5 | * |
| div | ||
| mod | ||
| / | ||
| >> | ||
| << | ||
| Left to right | 4 | + |
| − | ||
| Left to right | 3 | = or == |
| <> or != | ||
| < | ||
| <= | ||
| > | ||
| >= | ||
| Left to right | 2 | & |
| | | ||
| ^ | ||
| Nonassociative | 1 | in |
Of course, you can always override the default precedence and associativity of an operator by using parentheses in an expression.
|