|
Those operands that include delimiters as part of their definition
are called delimiter-dependent operands. Table 1 shows
the delimiter-dependent syntaxes that the Parse Service Routine recognizes
and the macro instruction that
is used to specify each type.
Table 1. Delimiter-dependent
operandsOperand |
macro instruction used to
describe operand |
---|
DELIMITER
STRING
VALUE
ADDRESS
PSTRING
USERID
UID2PSWD
DSNAME
DSTHING
QSTRING
SPACE
JOBNAME
|
IKJPOSIT |
CONSTANT
VARIABLE
STATEMENT NUMBER
|
IKJTERM |
EXPRESSION |
IKJOPER |
RESERVED WORD |
IKJRSVWD |
HEX
CHAR
INTEG
|
IKJIDENT |
- DELIMITER
- A delimiter can be any character other than an asterisk, left
parenthesis, right parenthesis, semicolon, blank, comma, tab, carrier
return, digit, shift-out character (X'0E'), or shift-in character
(X'0F'). A self-defining delimiter character is represented
in this discussion by the symbol #. The delimiter operand is used
only in conjunction with the string operand.
- STRING
- A string is the group of characters between two alike self-defining
delimiter characters, such as
#string#
or,
the group of characters between a self-defining delimiter character
and the end of a logical line, such as #string
The
same self-defining delimiter character can be used to delimit two
contiguous strings, such as #string#string#
or #string#string
A
null string, which indicates that a positional operand has not been entered,
is defined as two contiguous delimiters or a delimiter and the end
of the logical line. If the missing string is a required operand,
the null string must be entered as two contiguous delimiters. Note
that a string received from a prompt or a default must not include
the delimiters. See Acceptance of double-byte character set data for information about using double-byte character
set data in a self-delimiting string.
- VALUE
- A value consists of a character followed by a string enclosed
in apostrophes, such as
X'string'
The character
must be alphabetic or one of the special characters $, #, @. The
string can be of any length and can consist of any combination of
enterable characters. If the ending apostrophe is omitted, the Parse Service Routine assumes
that the string ends at the end of the logical line. If the Parse Service Routine encounters
two successive apostrophes, it assumes they are part of the string
and continues to scan for a single ending apostrophe. The Parse Service Routine always
translates the character preceding the first apostrophe to uppercase.
The value is considered missing if the first character is not alphabetic
or one of the special characters $, #, @, or if the second character
is not an apostrophe. See Acceptance of double-byte character set data for information
about using double-byte character set data in a value string.
- ADDRESS
- There are several forms of the ADDRESS operand. Note that blanks
are not allowed within any form of the ADDRESS operand.
- Absolute address
- consists of from one to six hexadecimal digits followed by a period,
or, in extended mode, from one to eight hexadecimal
digits followed by a period. An extended absolute address must not
exceed the address represented by the hexadecimal value X'7FFFFFFF'.
(For more information on extended addressing, see the description
of the EXTENDED operand in Using IKJPOSIT to describe a delimiter-dependent positional operand.)
- Relative address
- consists of from one
to six hexadecimal digits preceded by a plus sign, or, in extended
mode, from one to eight hexadecimal digits preceded
by a plus sign.
- General register address
- consists of a decimal integer in the range 0 to 15 followed by
the letter R. R can be entered in either uppercase or lowercase.
- Floating-point register address
- consists of an even decimal integer in the range 0 to 6 followed
by the letter D (for double precision) or E (for single precision).
The letter E or D can be entered in either uppercase or lowercase.
- Vector register address
- is of the form:
register-number {V} (element-number)
{W}
- register-number
- consists of a decimal integer in the range 0-15, if V is specified.
If W is specified, the register number must be an even decimal integer
in the range 0-14.
- V
- indicates single precision. V can be entered in either uppercase
or lowercase.
- W
- indicates double precision. W can be entered in either uppercase
or lowercase.
- element-number
- consists of a decimal integer in the range 0 through one less
than the section size, or an asterisk, (*). Asterisk indicates that
all elements of the vector register are considered.
The section
size, which is the number of elements in a vector register, is dependent
upon the model of the CPU that has the vector facility installed.
See System/370 Vector
Operations for information on the vector facility.
- Vector mask register address
- consists of the decimal integer 0 followed by the letter M. M
can be entered in either uppercase or lowercase.
- Access register address
- consists of a decimal integer in the range 0 to 15 followed by
the letter A. A can be entered in either uppercase or lowercase.
- Symbolic address
- consists of any combination of alphanumeric characters and the
break character, and may be up to 32 characters long. The first character
must be either alphabetic or one of the special characters $, #, @.
- Qualified address
- has one of the following formats:
- module_name.entry_name.relative_address
- module_name.entry_name
- module_name.entry_name.symbolic_address
- .entry_name.symbolic_address
- .entry_name.relative_address
- .entry_name
- module_name
- any combination of one to eight alphanumeric characters, where
the first is an alphabetic character or one of the special characters
$, #, @
- entry_name
- same syntax as a module_name, and always preceded
by a period
- symbolic_address
- syntax as defined above, and always preceded by a period
- relative_address
- syntax as defined above, and always preceded by a period.
The user can qualify symbolic or relative
addresses to indicate that they apply to a particular module and CSECT
as in formats 1 to 3. However, if the address applies to the
currently active module, it is not necessary to specify module_name,
as in formats 4 to 6.
- Indirect address
- is an absolute, relative, or symbolic address (or general register
containing an address), followed by 1 to 255 indirection symbols (%
or ?). When the EXTENDED keyword is specified on the IKJPOSIT macro,
the user can
specify the 31-bit indirection symbol, ?. The 24-bit indirection symbol, %, can also
be specified. If EXTENDED is not specified, only the 24-bit indirection
symbol can be used.
Note: In the following examples, hash marks indicate
that the byte is not used to determine the 24-bit address.
Figure 1 shows an example of an indirect address
that is made up of a relative address with one level of 24-bit indirect
addressing.
Figure 1. Example
of 24-Bit Indirect Addressing
The number of indirection symbols following the address indicates
the In Figure 1, the data
is at the location pointed to by bits 0-24 of relative address +A.
Figure 2 shows how the substitution of a 31-bit
indirection symbol, ?, changes the result of the resolution of an
indirect address. The example assumes that EXTENDED has been specified
on IKJPOSIT.
Figure 2. Example
of 31-Bit Indirect Addressing
Figure 3 shows an example of an
indirect address in which 24- and 31-bit indirection symbols are combined.
The example assumes that EXTENDED has been specified on IKJPOSIT.
In Figure 3, four levels of indirect addressing are
processed to resolve the indirect address.
Figure 3. An Indirect Address with Mixed Indirection
Symbols
- Address expression
- has one of two formats, depending on whether the EXTENDED keyword
is specified on the IKJPOSIT macro.
- EXTENDED not specified:
An address
expression has the following format when EXTENDED has not been specified: address{±}expression_value[%…][+
{±}expression_value [%…]]…
- address
- can be an absolute, symbolic, indirect, relative, or general register
address. If a general register is specified, it must be followed
by at least one indirection symbol.
- expression_value
- a plus or minus displacement from an address in storage, consisting
of from one to six decimal or hexadecimal digits
- Decimal displacement is indicated by an "N" or "n" following
the offset. The absence of an "N" or "n" indicates hexadecimal
displacement.
- There is no limit to the number of expression values in an address
expression.
Each expression value can be followed by from one to 255 percent
signs, one for each level of indirect addressing.
For example, addr1+124n,
an address expression in decimal format, indicates a location 124
decimal bytes beyond addr1. Another example, addr2-AC,
is an address expression in hexadecimal format and indicates a location
172 decimal bytes before addr2.
The processing
of an address expression, 12R%%+4N%, involving 24-bit indirect addressing,
is shown in Figure 4. The address in the
expression is a general register address with two levels of indirect
addressing. The result of the processing of this part of the address
expression is location 1D0. The expression value indicates a displacement
of four bytes beyond location 1D0 with one level of indirect addressing.
The data, then, is at location 474. Figure 4. An Address Expression with 24-Bit Indirect Addressing
- EXTENDED specified:
An
address expression has the following format when EXTENDED has been
specified: [ ]+
[ ]
address{±}expression_value[[%] ][+
{±}expression_value[[%] ]]
[[&?] …+
][ [[?] …]] …
- address
- can be an absolute, symbolic, indirect, relative, or general register
address. If a general register is specified, it must be followed
by at least one indirection symbol.
- expression_value
- a plus or minus displacement from an address in storage, consisting
of a one- to ten-digit decimal number, or a one- to eight-digit hexadecimal
number.
- Decimal displacement is indicated by an "N" or "n" following
the offset. The absence of an "N" or "n" indicates hexadecimal
displacement.
- There is no limit to the number of expression values in an address
expression.
Each expression value can be followed by from one to 255 indirection
symbols (including any valid combination of question marks and percent
signs), one for each level of indirect addressing.
The processing of an address expression involving
both 24- and 31-bit indirect addressing is shown in Figure 5. Figure 5. An Address Expression with Mixed Indirection Symbols
- PSTRING
- A parenthesized string is a string of characters enclosed within
a set of parentheses, such as:
(string)
The
string can consist of any combination of characters of any length,
with one restriction; if it includes parentheses, they must be balanced.
However, the enclosing right parenthesis of a PSTRING can be omitted
if the string ends at the end of a logical line.
A null PSTRING
is defined as a left parenthesis followed by either a right parenthesis
or the end of a logical line. See Acceptance of double-byte character set data for
information about using double-byte character set data in a parenthesized
string.
- USERID
- A user ID consists of an identification optionally followed by
a slash and a password. The format is:
identification[/password]
- identification
- can be any combination of alphanumeric characters up to seven
characters in length, the first of which must be an alphabetic character
or one of the special characters $, #, @.
- password
- can be any combination of alphanumeric characters up to eight
characters in length. If delimiters are used, the password must be
enclosed in quotes. If quotes are to be used in the password, two
quotes must be entered consecutively. One of them will be eliminated
by the Parse Service Routine.
Separators can be inserted between the identification
and the slash, and between the slash and the password.
If just
the identification is entered, the Parse Service Routine does
not prompt for a password. If the identification is entered followed
by a slash and no password, the Parse Service Routine prompts
for a password. The password entered by the terminal user does not
print at the terminal. The terminal user can reply to a prompt for
password by entering either a password or a null line. If the user
enters a null line, the Parse Service Routine builds
the PDE and leaves the respective password field zero.
- UID2PSWD
- A user ID consists of an identification optionally followed
by two passwords. The delimiter between the three values is a slash.
The format is:
identification[/password1[/password2]]
- identification
- can be any combination of alphanumeric characters up to seven
characters in length, the first of which must be an alphabetic character
or one of the special characters $, #, @.
- password1
- can be any combination of alphanumeric characters up to eight
characters in length. If delimiters are used, the password must be
enclosed in quotes. If quotes are to be used in the password, two
quotes must be entered consecutively. One of them will be eliminated
by the Parse Service Routine.
- password2
- Same as password1.
Separators can be inserted
between the identification and the slash, and between a slash and
any of the passwords.
If just the identification is entered,
the parse service routine does not prompt for a password.
If
the identification is entered followed by a slash and no password1,
the parse service routine prompts for password1. The password1 entered
by the terminal user does not print at the terminal.
If password1
is entered followed by a slash and no password2, the parse service
routine prompts for password2. The password2 entered by the terminal
user does not print at the terminal.
The terminal user can reply
to a prompt for a password by entering either a password or a null
line. If the user enters a null line, the parse service routine builds
the PDE and leaves both password fields zero.
IKJPOSIT generates a variable-length parameter
control entry (PCE). Within the PCE, a field contains a hexadecimal
number indicating the type of positional operand described by the
PCE. For UID2PSWD, the hexadecimal number is C.
- DSNAME
- The data set name operand has three possible formats:
dsname [ (membername)] [/password]
[dsname] (membername) [password]
'dsname [ (membername)] ' [/password]
- dsname
- may be either a qualified or an unqualified name.
An unqualified
name is any combination of alphanumeric characters up to eight characters in length,
the first of which must be an alphabetic character or one of the special
characters $, #, @.
A qualified name is made up of several unqualified
names, each unqualified
name separated by a period. A qualified name, including the periods,
can be up to 44 characters in length.
- membername
- One to eight alphanumeric characters, the first of which must
be an alphabetic character or one of the special characters $, #,
@.
The Parse Service Routine considers
the entire DSNAME operand missing if the first character scanned is
not an apostrophe, an alphabetic character, a special character
$, #, @, or a left parenthesis. If the VOLSER option is specified,
the first character can be numeric.
If it is numeric, only six
characters are accepted for VOLSER. VOLSER is valid only for DSNAME
or DSTHING. If USID is specified, the Parse Service Routine will
prefix all data set names not entered in quotes with the user identification
contained in the user profile table (UPT). Note that the user identification
is not necessarily the user ID but can be any dsname-prefix specified
as parameter with the PROFILE PREFIX command.
If uppercase
data set names are required, the ASIS operand should not be specified.
Lowercase data set names are allowed as input by PARSE, but converted
to uppercase when UPPERCASE is specified, either explicitly or by
default. In order to disallow lowercase data set names as input, a
validity check exit must be used.
If the slash and the password
are not entered, the parse service routine does not prompt for the
password. If the slash is entered and not the password, the Parse Service Routine prompts
for the password. This ensures that the terminal user's reply does
not print at the terminal.
- DSTHING
- A DSTHING is a dsname operand as previously defined except that
an asterisk can be substituted for an unqualified name or for each
qualifier of a qualified name. The parse service routine processes
the asterisk as if it were a dsname. The asterisk is used to indicate
that all data sets at that particular level are considered.
Note: If
the first character of a dsname is an asterisk, the parse service
routine will not prefix the USERID.
- QSTRING
- A quoted string is a string of characters enclosed within apostrophes,
such as:
‘string’
The string can consist
of a combination of characters, of any length, with one restriction:
if the user wants to enter apostrophes within the string, two successive
apostrophes must be entered for each single apostrophe desired. One
of the apostrophes is removed by the Parse Service Routine.
The
ending apostrophe is not required if the string ends at the end of
the logical line.
A null quoted string is defined as two contiguous
apostrophes or an apostrophe
at the end of the logical line. See Acceptance of double-byte character set data for
information about using double-byte character set data in a quoted
string.
- SPACE
- Space is a special purpose operand; it allows a string operand
that directly follows a command name to be entered without a preceding
self- defining delimiter character. The space operand must always
be followed by a string operand. If the delimiter of the command
name is a tab, the tab is the first character of the string. The
string always ends at the end of the logical line.
- JOBNAME
- The jobname can have an optional job identifier. Each job identifier is a maximum of eight alphanumeric
characters, the first of which must be an alphabetic character or
one of the special characters $, #, @. There is no separator character
between the jobname and job identifier. The syntax is jobname(jobid).
- CONSTANT
- There are several forms of the constant operand.
- Fixed-point numeric literal
- consists of a string of digits (0 through 9) preceded optionally
by a sign (+ or -), such as:
+1234.43
This
literal can contain a decimal point anywhere in the string except
as the rightmost character. The total number of digits cannot exceed
18. Embedded blanks are not allowed.
- Floating-point numeric literal
- takes the following form:
+1234.56E+10
This
literal is a string of digits (0 through 9) preceded optionally by
a sign (+ or -) and must contain a decimal point. This is immediately
followed by the letter E and then a string of digits (0 through 9)
preceded optionally by a sign (+ or -). Embedded blanks are not allowed.
The string of digits preceding the letter E cannot be greater than
16 and the string following E cannot be greater than 2.
- Non-numeric literal
- consists of a string of characters from the EBCDIC character set, excluding the apostrophe,
and enclosed in apostrophes, entered as:
‘numbers (1234567890) and letters are ok’
The
length of the string excluding apostrophes can be from 1 to 120 characters
in length.
- Figurative constant
- is one of a set of reserved words supplied by the caller of the Parse Service Routine such
as:
test123
A
figurative constant consists of a string of characters up to 255 in
length. Embedded blanks are not allowed. All characters of the EBCDIC
character set are allowed except the blank, comma, tab, semicolon,
and carrier return, however, the first operand must be alphabetic.
See Acceptance of double-byte character set data for information about using double-byte character
set data in a quoted character constant.
- VARIABLE
- The following is the form of the variable operand.
[program_id.]data_name[{OF}qualification]
[{IN} ]
[ (subscript) ]
- program_id
- consists of the first eight characters of a program identifier
followed by a period. The first character must be alphabetic (A through
Z) and the remaining characters must be alphabetic or numeric (0 through
9).
- data_name
- consists of a maximum of 30 characters of the following types:
alphabetic (A through Z), numeric (0 through 9), and hyphen (-).
An
example is: mydataset-123
The data-name
cannot begin or end with a hyphen and must contain at least one alphabetic
character. here55.mydataset-123
- qualification
- is applied by placing one or more data-names (preceded by the
qualifiers IN or OF) after a data-name. An example is:
mydataset-123 of yourdataset-456
The
number of qualifiers that can be entered for a data-name is limited
to 255.
- subscript
- consists of a data-name with subscripts enclosed in parentheses
following the data-name entered as:
yourdataset-456 (mydataset-123)
A
separator between the data-name and the subscript is optional. Subscripts
are a list of constants or variables.
The number of subscripts
that can be entered for a data-name is limited to 3, entered as: here55 (abc def h15)
A
separator character between subscripts is required.
- STATEMENT NUMBER
- The following is the form of a statement number:
[program_id.]line_number[.verb_number]
- program_id
- consists of the first eight characters of a program identifier
followed by a period. The first character must be alphabetic (A through
Z) and the remaining characters must be alphanumeric (A through Z
or 0 through 9).
- line_number
- consists of a string of digits (0 through 9) and cannot exceed
a length of six digits.
- verb_number
- consists of one digit (0 through 9) that is preceded by a period.
Embedded blanks are not allowed in a statement
number.
- EXPRESSION
- An expression takes the form:
(operand1 operator operand2)
The
operator in the expression shows a relationship between the operands,
such as: (abc equals 123)
An expression
must be enclosed in parentheses. An expression is defined by the
IKJOPER macro. The operands are defined by the IKJTERM macro, and
the operator is defined by the IKJRSVWD macro instruction.
- RESERVED WORD
- has three uses depending on the presence of operands on the IKJRSVWD macro instruction. The
uses are:
- When used with the RSVWD keyword of the IKJTERM macro instruction, the IKJRSVWD
macro identifies the beginning of a list of reserved words, any one
of which can be entered as a constant.
- When used with the RSVWD keyword of the IKJOPER macro instruction, the IKJRSVWD
macro identifies the beginning of a list of reserved words, any one
of which can be an operator in an expression.
- When used by itself, the IKJRSVWD macro instruction defines
a positional reserved word operand.
The IKJRSVWD macro instruction is followed
by a list of IKJNAME macros that contain all of the possible reserved
words used as figurative constants or operators.
- HEX
- A hexadecimal value is any quantity of the form X'nn',
‘ABC’ (quoted string), or any non-quoted character string where a
separator or delimiter indicates the end. See Acceptance of double-byte character set data for
information about using double-byte character set data in a quoted
string of characters.
- CHAR
- A character string is any data in the form of a quoted or non-quoted
string. See Acceptance of double-byte character set data for information about
using double-byte character set data in a quoted string of characters.
- INTEG
- An integer is a numeric quantity in one of the following forms:
- (X'nn') - where n is a valid hexadecimal digit
(A-F, 0-9), and there is a maximum of 8 digits.
- (B'mm') - where m is a valid binary bit (0-1),
and there is a maximum of 32 digits.
- dddddd - where d is a decimal digit 0-9, and there is a
maximum of 10 digits.
The Parse Service Routine converts
an integer operand into its equivalent binary value. The maximum
decimal value for INTEG is 2147843647.
|