📄 rfc138.txt
字号:
arithmeticexpression
operator ::= + | - | * | /
primary ::= identifier | L(identifier) | V(identifier) |
INTEGER
The replication expression is a repeat function applied to the
combined data type and value expression. It expresses the number of
times that the value (of the data type/value expression) is to be
repeated within the field length denoted by the data type/length
expression.
A null replication expression has the value of one. Arithmetic
expressions are evaluated from left-to-right with no precedence. (It
is anticipated that this interpretation might be changed, if
necessary.)
The L(identifier) is a length operator that generates a 32-bit binary
integer corresponding to the length of the term named. The
V(identifier) is a value operator that generates a 32-bit binary
integer corresponding to the value of the term named. (See
Restrictions and Interpretations of Term Functions.) The value
operator is intended to convert character strings to their numerical
correspondents.
Anderson, et al. [Page 12]
RFC 138 Data Reconfiguration Service April 1971
The data type is defined below.
datatype ::= B | O | X | E | A
The data type describes the kind of data that the term represents.
(It is expected that additional data types, such as floating point
and user-defined types, will be added as needed.)
Data Type Meaning Unit Length
B Bit string 1 bit
O Bit string 3 bits
X Bit string 4 bits
E EBCDIC character 8 bits
A Network ASCII character 8 bits
The value expression is defined below.
valueexpression ::= value | <null>
value ::= literal | arithmeticexpression
literal ::= literaltype "string"
literaltype ::= B | O | X | E | A
The value expression is the unit value of a term expressed in the
format indicated by the data type. It is repeated according to the
replication expression, in a field whose length is constrained by the
length expression.
A null value expression in the input stream defaults to the data
present in the input stream. The data must comply with the datatype
attribute, however.
A null value expression generates padding according to Restrictions
and Interpretations of Term Functions.
The length expression is defined below.
lengthexpression ::= # | arithmeticexpression | <null>
The length expression states the length of the field containing the
value expression as expanded by the replication expression. If the
value of the length expression is less then the length implied by the
expanded value expression, then the expanded value expression is
truncated, see Restrictions and Interpretations of Term Functions.
The terminal symbol # means an arbitrary length, explicitly
terminated by the value of the next term. The # is legal only in the
input stream and not in the output stream.
Anderson, et al. [Page 13]
RFC 138 Data Reconfiguration Service April 1971
If the length expression is less than or equal to zero, the term
succeeds but the appropriate stream pointer is not advanced.
Positive lengths cause the appropriate stream pointer to be advanced
if the term otherwise succeeds.
Control is defined under TERM AND RULE SEQUENCING.
Term Format 3
Term format 3 is shown below.
descriptor
It is identical to term format 2 with the omission of the identifier.
Term format 3 is generally used in the output stream. It is used in
the input stream where input data is to be passed over but not
retained for emission or later reference.
Term Format 4
The fourth term format is shown below.
comparator ::= (value connective value control) |
(identifier .<=. value control)
value ::= literal | arithmeticexpression
literal ::= literaltype "string"
literaltype ::= B | O | X | E | A
string ::= from 0 to 256 characters
connective ::= .LE. | .LT. | .GE. | .GT. | .EQ. | .NE.
The fourth term format is used for assignment and comparison.
The assignment operator .<=. assigns the value to the identifier.
The connectives have their usual meaning. Values to be compared must
have the same type and length attributes or an error condition arises
and the form fails.
The Application of a Term
The elements of a term are applied by the following sequence of
steps.
1. The data type and value expression together specify a unit
value, call it x.
2. The replication expression specifies the number of times x
is to be repeated (or copied) in concatenated fashion. The
value of the concatenated xs becomes, say, y of length L1.
Anderson, et al. [Page 14]
RFC 138 Data Reconfiguration Service April 1971
3. The data type and the length expression together specify a
field length of the input area (call it L2) that begins at
the current stream pointer position.
4. The value of y is truncated to y' if L1 > L2. Call the
truncated length L1'.
5. If the term is an input stream term, then the value y' of
length L1' is compared to the input value beginning at the
current input pointer position.
6. If the values are identical over the length L1' then the
input value of length L2 (may be greater than L1') starting
at the current pointer position in the input area, becomes
the value of the term.
In an output stream term, the procedure is the same except that the
source of input is the value of the term(s) named in the value
expression and the data is emitted in the output stream.
The above procedure is modified to include a one term look-ahead
where lengths are indefinite because of the arbitrary symbol, #.
Restrictions and Interpretations of Term Functions
1. Terms specifying indefinite lengths, through the use of the #
symbol must be separated by some type-specific data such as a
literal. (A literal isn't specifically required, however. An
arbitrary number of ASCII characters could be terminated by a
non-ASCII character.) # is legal only in the input stream, not
in the output stream.
2. Truncation and padding is as follows:
a) Character to character (A <--> E) conversion is left
justified and truncated or padded on the right with blanks.
b) Character to numeric and numeric to numeric conversions are
right-justified and truncated or padded on the left with
zeros.
c) Numeric to character conversion is right-justified and
left-padded with blanks.
3. The following are ignored in a form definition over the control
connection.
a) TAB, carriage return, etc.
b) blanks except within quotes.
c) /* string */ is treated as comments except within quotes.
4. The following defaults prevail where the term part is omitted.
Anderson, et al. [Page 15]
RFC 138 Data Reconfiguration Service April 1971
a) The replication expression defaults to one.
b) The data type defaults to type B.
c) The value expression of an input stream term defaults to
the value found in the input stream, but the input stream
must conform to data type and length expression. The value
expression of an output stream term defaults to padding
only.
d) The length expression defaults to the size of the quantity
determined by replication expression, data type, and value
expression.
e) Control defaults to the next sequential term if a term is
successfully applied; else control defaults to the next
sequential rule. If _where_ evaluates to an undefined
_label_ the form fails.
5. Arithmetic expressions are evaluated left-to-right with no
precedence.
6. The following limits prevail.
a) Binary lengths are <= 32 bits
b) Character strings are <= 256 8-bit characters
c) Identifier names are <= 4 characters
d) Maximum number of identifiers is <= 256
e) Label integers are >= 0 and <= 9999
7. Value and length operators product 32-bit binary integers. The
value operator is currently intended for converting A or E type
decimal character strings to their binary correspondents. For
example, the value of E'12' would be 0......01100. The value
of E'AB' would cause the form to fail.
Anderson, et al. [Page 16]
RFC 138 Data Reconfiguration Service April 1971
TERM AND RULE SEQUENCING
Sequencing may be explicitly controlled by including control in a
term.
control ::= :options | <null>
options ::= S(where) | F(where) | U(where)
S(where) , F(where) |
F(where) , S(where)
where ::= arithmeticexpression | R(arithmeticexpression)
S, F, and U denote success, fail, and unconditional transfers,
respectively. _Where_ evaluates to a _rule_ label, thus transfer can
be effected from within a rule (at the end of a term) to the
beginning of another rule. R means terminate the form and return the
evaluated expression to the initiator over the control connection (if
still open).
If terms are not explicitly sequenced, the following defaults
prevail.
1) When a term fails go to the next sequential rule.
2) When a term succeeds go to the next sequential
term within the rule.
(3) At the end of a rule, go to the next sequential
rule.
Note in the following example, the correlation between transfer of
control and movement of the input pointer.
1 XYZ(,B,,8:S(2),F(3)) : XYZ ;
2 . . . . . . .
3 . . . . . . .
The value of XYZ will never be emitted in the output stream since
control is transferred out of the rule upon either success or
failure. If the term succeeds, the 8 bits of input will be assigned
as the value of XYZ and rule 2 will then be applied to the same input
stream data. That is, since the complete rule 1 was not successfully
applied, then the input stream pointer is not advanced.
Anderson, et al. [Page 17]
RFC 138 Data Reconfiguration Service April 1971
IV. EXAMPLES
REMARKS
The following examples (forms and also single rules) are simple
representative uses of the Form Machine. The examples are expressed
in a term-per-line format only to aid the explanation. Typically, a
single rule might be written as a single line.
FIELD INSERTION
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -