Previous | Contents | Index |
The following table lists the categories of operators, their symbols, and their meanings.
Category | Symbol | Operation |
---|---|---|
Arithmetic
operators |
+
- / * ** |
Addition or prefix plus
Subtraction or prefix minus Division Multiplication Exponentiation |
Relational
(or comparison) operators |
>
< = ^> ^< ^= >= <= |
Greater than
Less than Equal to Not greater than Not less than Not equal to Greater than or equal to Less than or equal to |
Bit-string
(or logical) operators |
^ (prefix)
& | &: |: ^ (infix) |
Logical NOT
Logical AND Logical OR Logical AND THEN Logical OR ELSE Logical EXCLUSIVE OR |
Concatenation
operator |
|| | String concatenation |
For any of the operators, the tilde character (~) can be used instead of a circumflex (^), and an exclamation point (!) can be used instead of a vertical bar (|). |
The following table gives the priority of PL/I operators. Low numbers indicate high priority. For example, the exponentiation operator (**) has the highest priority (1), so it is performed first, and the OR ELSE operator (|:) has the lowest priority (9), so it is performed last.
Operator | Priority | Left/Right Associative | Order of Evaluation |
---|---|---|---|
() | 0 | N/A | deepest first |
** | 1 | right | left to right |
+ (prefix) | 1 | N/A | N/A |
- (prefix) | 1 | N/A | N/A |
^ (prefix) | 1 | N/A | N/A |
* | 2 | left | left to right |
/ | 2 | left | left to right |
+ (infix) | 3 | left | left to right |
- (infix) | 3 | left | left to right |
|| | 4 | left | left to right |
> | 5 | left | left to right |
< | 5 | left | left to right |
^> | 5 | left | left to right |
^< | 5 | left | left to right |
= | 5 | left | left to right |
^= | 5 | left | left to right |
<= | 5 | left | left to right |
>= | 5 | left | left to right |
& | 6 | left | left to right |
| | 7 | left | left to right |
^ (infix) | 7 | left | left to right |
&: | 8 | left | left to right across entire expression |
|: | 9 | left | left to right across entire expression |
The following table discusses the contexts in which PL/I performs data conversion.
Contexts in Which PL/I Converts Data
Context | Conversion Performed |
---|---|
target = expression; | In an assignment statement, the given expression is converted to the data type of the target. |
entry-name
RETURNS (attribute...); . . . |
In a RETURN statement, the specified value is converted to the data type specified by the RETURNS option on the PROCEDURE or ENTRY statement. |
RETURN (value); | |
x + y
x - y x * y x / y x**y x||y x & y x | y x&:y x|:y x ^ y x > y x < y x = y x^=y |
In any expression, if operands do not have the required data type, they are converted to a common data type before the operation. For most operators, the data types of all operands must be identical. A warning message is issued in the case of a concatenation conversion. |
BINARY (expression)
BIT (expression) CHARACTER (expression) DECIMAL (expression) FIXED (expression) FLOAT (expression) OFFSET (variable) POINTER (variable) |
PL/I provides built-in functions that perform specific conversions. |
PUT LIST (item,...); | Items in a PUT LIST statement are converted to character-string data. |
GET LIST (item,...); | Character-string input data is converted to the data type of the target item. |
PAGESIZE (expression)
LINESIZE (expression) SKIP (expression) LINE (expression) COLUMN (expression) format items A, B, E, F, and X TAB (expression) |
Values specified for various options to PL/I statements must be converted to integer values. |
DO control-variable... | Values are converted to the attributes of the control variable. |
parameter | Actual parameters are converted to the type of the formal parameter if necessary. |
INITIAL attribute | Initial values are converted to the type of the variable being initialized. |
PL/I has the following pseudovariables:
A pseudovariable can be used, in certain assignment contexts, in place of an ordinary variable reference. For example:
SUBSTR(S,2,1) = 'A'; |
A pseudovariable can be used wherever the following three conditions are true:
Pseudovariables are used most often in the following locations:
Note that a pseudovariable cannot be used in preprocessor statements or in an argument list. For example:
CALL P(SUBSTR(S,2,1)); |
Here, SUBSTR is interpreted as a built-in function reference, not as a
pseudovariable. The actual argument passed to procedure P is a dummy
argument containing the second character of string S.
E.5 Built-In Subroutines
The following table summarizes the file-handling built-in subroutines.
Summary of File-Handling Built-In Subroutines
Subroutine | Function |
---|---|
DISPLAY | Returns information about a file. |
EXTEND | Allocates additional disk blocks for a file. |
FLUSH | Requests the file system to write all buffers onto disk to preserve the current status of a file. |
FREE | Unlocks all the locked records in a file. |
NEXT_VOLUME | Begins processing the next volume in a multivolume tape set. |
RELEASE | Unlocks a specified record in a file. |
REWIND | Positions a file at its beginning or at a specific record. |
SPACEBLOCK | Positions a file forward or backward a specified number of blocks. |
PL/I also has the condition-handling subroutine RESIGNAL. This subroutine allows an ON-unit to pass on a condition signal and causes the condition to be resignaled for handling by a different ON-unit.
Index | Contents |