⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc138.txt

📁 RFC 的详细文档!
💻 TXT
📖 第 1 页 / 共 4 页
字号:
                                       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 + -