summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc515.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc515.txt')
-rw-r--r--doc/rfc/rfc515.txt1739
1 files changed, 1739 insertions, 0 deletions
diff --git a/doc/rfc/rfc515.txt b/doc/rfc/rfc515.txt
new file mode 100644
index 0000000..3524553
--- /dev/null
+++ b/doc/rfc/rfc515.txt
@@ -0,0 +1,1739 @@
+
+
+
+
+
+
+Network Working Group R. Winter
+Request for Comments: 515 Computer Corporation of America
+NIC 16446 6 June 1973
+
+
+ Specifications for Datalanguage, Version 0/9
+
+Preface
+
+ Datalanguage is the language processed by the Datacomputer, a data
+ utility system being developed for the Arpanet. The Datacomputer
+ performs data storage and data management functions for the benefit
+ of computers on the network.
+
+ Version 0/9 is currently running at CCA. This version is extremely
+ primitive; however, it does offer an opportunity for experience with
+ the Datacomputer and with fundamental Datalanguage concepts.
+
+ Subsequent versions will provide greater portions of the full
+ Datalanguage capability, which has been described earlier
+ (Datalanguage, Working Paper No. 3, Datacomputer Project, October,
+ 1971, NIC 8028). For example, one of the primary restrictions in
+ 0/9--elementary data items must be fixed-length ASCII strings--will
+ be eliminated in Version 0/10, which is currently being implemented.
+
+ Based on the experience gained in the implementation of these early
+ versions, and based on the feedback from their use, a revised
+ specification of the full language will be issued.
+
+1. Introduction
+
+ This document presents a precise and complete specification of
+ Datalanguage, Version 0/9. It is organized into 11 sections, of
+ which this introduction is the first. Section 2 discusses the
+ capabilities of Version 0/9 in general terms. Sections 3 and 4 are
+ concerned with data description and the directory. Sections 5
+ through 8 cover the expression of data management operations.
+ Section 9 discusses the recognition of names. Section 10 covers
+ miscellaneous topics and Section 11 specifies the syntax in BNF.
+
+ This specification is to be followed with a user manual, which will
+ present the language in tutorial form and treat components of the
+ Datacomputer-user interface other than the language.
+
+
+
+
+
+
+
+
+Winter [Page 1]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+2. Capabilities of Version 0/9
+
+ Version 0/9 of Datalanguage has capabilities for the storage of
+ files; for addition of data to existing files, and for the deletion
+ of files. Retrievals can output whole files as well as subsets of
+ files. Data can be selected from files by content, using expressions
+ formed from boolean and inequality operators.
+
+ At the option of the file creator, an inversion is constructed and
+ maintained by the Datacomputer. The inversion increases the
+ efficiency of selective retrieval, at the cost of storage space and
+ file maintenance effort. Users other than the file creator need not
+ be aware of the existence of the inversion, or of which fields are
+ inverted file keys. The language is designed so that they state the
+ desired result of a retrieval, and the Datacomputer uses the
+ inversion as much as the request permits.
+
+ Elementary data items are fixed-length ASCII strings. Files are a
+ restricted class of hierarchical structures.
+
+ Many of the restrictions mentioned in this memo will be short-lived.
+ In particular, those statements followed with 3 asterisks (***) refer
+ to restrictions that will be considerably weakened or eliminated
+ entirely in the next version of the software.
+
+3. Data Description
+
+ A container is a variable whose value is a data object of general
+ character and arbitrary size (In Version 0/9, size is restricted.
+ See section 3.4). Examples of containers which are implemented in
+ other systems are files, records, fields, groups, and entries.
+
+ The container is distinct from the data in the container. For
+ example, space allocation is an operation on a container, while
+ changing the unit price field from 25 to 50 is an operation on data
+ in a container.
+
+ A container may enclose other containers. When a container is not
+ enclosed by another container, it is said to be outermost. If
+ container A encloses container B, and no other container in A also
+ encloses B, then A immediately encloses B.
+
+ A Datalanguage description is a statement of the properties of a
+ container.
+
+ All containers have the attributes ident and type. Ident is a
+ character string by which users refer to the container. Type
+ determines the form of the container's value; the value can be
+
+
+
+Winter [Page 2]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ elementary, or it can consist of other containers. There are 3
+ types: LIST, STRUCT, and STRING(***). A LIST contains a group of
+ containers having the same description. A STRUCT contains a group of
+ containers, each of which has its own description. A STRING is a
+ sequence of ASCII characters. While a STRING is not really an
+ elementary item, it is handled as one in Version 0/9.
+
+ Certain containers can have other attributes. An outermost container
+ has a function. The function attribute specifies whether the
+ container is to be used for storage or for transmission.
+
+ Size is some meaningful dimension of the container, which is type-
+ dependent. It is used for space allocation and data stream parsing.
+
+ An aggregate container (i.e., one that contains other containers) has
+ as an attribute the description or descriptions of its components.
+ Thus if S is a STRUCT containing A, B, and C, then the descriptions
+ of A, B, and C are attributes of S.
+
+ A STRING defined in certain contexts can have an inversion attribute.
+ This is an access property that is not really local to the STRING,
+ but is associated with it for convenience.
+
+3.1 Ident
+
+ The ident of a container is composed of alphanumeric characters,
+ the first of which is alphabetic. It may not consist of more than
+ 100 characters.
+
+ The elements of a STRUCT must have idents unique in the STRUCT.
+
+3.2 Function
+
+ The function of a container is either FILE, PORT, or TEMPORARY
+ PORT. When the function is FILE, then the container is used for
+ storage of data at the Datacomputer. When the function is PORT,
+ then the container is used for transmission of data into or out of
+ the Datacomputer. When the function is TEMPORARY PORT (which may
+ be abbreviated TEMP PORT), the container behaves like a PORT;
+ however, its description is not retained in the Datacomputer
+ beyond the session in which it is created.
+
+
+
+
+
+
+
+
+
+
+Winter [Page 3]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+3.3 Type
+
+ Type is one of: LIST, STRUCT, or STRING. These are defined on the
+ preceding page.
+
+ In an occurrence of a STRUCT, the elements appear in the order in
+ which their descriptions appear in the STRUCT description. All
+ elements are present in each occurrence of the STRUCT.
+
+ An element of a STRUCT or LIST can be a container of any datatype.
+ However, the outermost container must be a LIST(***).
+
+3.4 Size
+
+ The size of a STRING is the number of characters in it. The size
+ of a STRUCT is not defined (***). The meaning of the size of a
+ LIST depends upon other properties of the LIST (***).
+
+ Ordinarily, the size of a LIST is the number of LIST-members. An
+ exception is the case of the outermost-LIST. In an outermost-LIST
+ with a function of FILE, the size is the number of LIST-members
+ for which space should be allocated. When no size is present in
+ this case, the system computes a default. In an outermost-LIST
+ with a function of PORT, the size is ignored (***).
+
+ Only outermost containers may be larger than a TENEX page (2560
+ ASCII characters)(***).
+
+3.5 Inversion
+
+ An inversion is an auxiliary data structure used to facilitate
+ retrieval by content.
+
+ Its basic application is the fast retrieval of sets of outermost-
+ LIST-members (this can be extended to other container sets, and
+ will be after release 1). Consider a list of weather
+ observations, stored as a file on the Datacomputer. If quick
+ retrieval of observations by COUNTRY is desired, then this is
+ indicated in the description of the COUNTRY container. According
+ to common usage in information retrieval, this makes COUNTRY a key
+ in the retrieval of observations.
+
+ Note that the inversion option only affects the efficiency of
+ retrieval by COUNTRY, not the ability to retrieve by COUNTRY.
+
+
+
+
+
+
+
+Winter [Page 4]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ There are restrictions on use of the inversion option. First, it
+ can be applied only to STRINGs. Second a STRING having the
+ inversion option must occur only once in each
+ outermost-LIST-member. Third, it is ignored when applied to
+ STRINGs in PORT descriptions.
+
+ Eventually there will be several types of inversion option; in
+ Version 0/9 there is only the 'D' option (for distinct).
+
+3.6 Syntax
+
+ The description is simply an enumeration of properties; these
+ properties are specified in the order:
+
+ <ident> <function> <type> <size> <other>
+
+ Properties which do not apply are omitted. An example:
+
+ F FILE LIST (25) A STR (10)
+
+ Here 'F' is the <ident>, 'FILE' is the <function>, 'LIST' is the
+ <type>, '(25)' is the size, and 'A STR (10)' is the <other> of one
+ description. Of course, 'A STR (10)' is itself another
+ description: the description for members of the LIST named F.
+
+ An example of a complete description for a file of weather
+ observations keyed on location:
+
+ WEATHER FILE LIST
+ OBSERVATION STRUCT
+ LOCATION STRUCT
+ CITY STR (10), I=D
+ COUNTRY STR (10), I=D
+ END
+ TIME STRUCT
+ YEAR STR (2)
+ DAY STR (3)
+ HOUR STR (2)
+ END
+ DATE STRUCT
+ TEMPERATURE STR (3)
+ RAINFALL STR (3)
+ HUMIDITY STR (2)
+ END
+ END
+ The ENDs are needed to delimit the list of elements of a STRUCT.
+ `, I=D' indicates that the string is to be an inversion key for
+ the retrieval of outermost-LIST-members.
+
+
+
+Winter [Page 5]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+4. Directory
+
+ The directory is a system file in which the names and descriptions of
+ all user-defined containers are kept.
+
+ The directory is structured as a tree. Each node has an ident, which
+ need not be unique. There is a single path from the root of the tree
+ to any node. The idents of the nodes along this path are
+ concatenated, separated by periods, to form a pathname, which
+ unambiguously identifies the node (e.g., A.B.C could be a pathname
+ for node with an ident of C).
+
+ In a later version of the software, the directory will be generalized
+ to provide for links between nodes, so that it will not properly be a
+ tree. For now, however, the tree model is convenient and adequate.
+
+ A node may represent a container, or it may simply hold a place in
+ the space of pathnames. When it represents a container, it cannot
+ (currently) have subordinate nodes.
+
+ Eventually, it is planned to model the directory as a structure of
+ containers, with its description distributed throughout the
+ structure. Most operations defined on the directory will be defined
+ on user data, and vice versa. Access privileges and privacy locks
+ will be part of the data description and will likewise be applicable
+ both to directory nodes and data structures below the node level.
+
+4.1 CREATE
+
+ A CREATE-request either; (a) adds a node to the directory,
+ optionally associating the description of either a PORT or a FILE
+ with the node, or (b) creates a temporary container which is not
+ entered in the directory, but has a description and can be
+ referenced in requests. If the description defines a file, CREATE
+ causes space to be allocated for the file.
+
+ To create a node with a description:
+ CREATE <pathname> <description> ;
+ To create a node with no description:
+ CREATE <pathname> ;
+ Note that the description determines whether or not the container
+ is temporary (see section 3.2 for details).
+
+
+
+
+
+
+
+
+
+Winter [Page 6]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ A CREATE-request adds a single node to the directory. Thus to add
+ CCA.RAW.F to an empty directory, three requests are needed:
+ CREATE CCA ;
+ CREATE CCA.RAW ;
+ CREATE CCA.RAW.F ;
+ Notice that the last ident of the pathname doubles as the first
+ ident of the description:
+ CREATE CCA.RAW.G FILE LIST A STR (5) ;
+
+ That is, G is both the ident of a node and the ident of an
+ outermost container of type LIST.
+
+4.2 DELETE
+
+ A DELETE-request deletes a tree of nodes and any associated
+ descriptions or data. The syntax is:
+ DELETE <pathname> ;
+ The named node and any subordinates are deleted.
+
+ Note that to delete data while retaining the directory entry and
+ description, DELETE should not be used (see section 6.3 for the
+ proper method).
+
+4.3 LIST
+
+ The LIST-request is used to display system data of interest to a
+ user. It causes the data specified to be transmitted through the
+ Datalanguage output port.
+
+ Several arguments of LIST apply to the directory. LIST %ALL
+ transmits all pathnames in the directory. LIST %ALL.%SOURCE
+ transmits all descriptions in the directory. Instead of %ALL, a
+ pathname can be used:
+ LIST <pn>.%ALL
+ Lists pathnames subordinate to <pn>.
+ LIST <pn>.%SOURCE
+ lists descriptions subordinate to the node represented by <pn>.
+
+ For details about the LIST-request, see section 10.1.
+
+5. Opening and closing containers
+
+ Containers must be open before they can be operated on.
+
+ A container is open when it is first created. It remains open until
+ closed explicitly by a CLOSE-request or implicitly by a DELETE-
+ request or by session end.
+
+
+
+
+Winter [Page 7]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ A closed container is opened by an OPEN-request. A temporary
+ container is always open; a CLOSE-request deletes it.
+
+5.1 Modes
+
+ An open container has a mode, which is one of: READ, WRITE, or
+ APPEND. The mode determines the meaning and/or legitimacy of
+ certain operations on the container.
+
+ The mode is established by the operation which opens the
+ container. It can be changed at any time by a MODE-request. A
+ CREATE leaves the container in WRITE mode. An OPEN either
+ specifies the mode explicitly or implicitly sets the mode to READ.
+
+5.2 Syntax
+
+ To open a container:
+ OPEN <pathname> <mode> ;
+ or:
+ OPEN <pathname> ;
+ where <mode> is defaulted to READ.
+
+ To close a container:
+ CLOSE <ident> ;
+ where <ident> is the name of an outermost container.
+
+ Two containers with the same outermost <ident> can not be
+ opened at the same time (***).
+
+ To change the mode of an open container:
+ MODE <ident> <newmode> ;
+
+5.3 LIST
+
+ LIST %OPEN transmits name, mode and connection status of each open
+ outermost container through the Datalanguage output port. (The
+ Datalanguage output port is the destination to which all
+ Datacomputer diagnostics and replies are sent. It is established
+ when the user initially connects to the Datacomputer.) For
+ details of the LIST-request, see section 10.1.
+
+6. Assignment
+
+ Assignment transfers data from one container to another.
+
+ The equal sign ('=') is the symbol for assignment. The value of the
+ operand on the right of the equal sign is transferred to the operand
+ on the left. (Eventually, both operands will be weakly-restricted
+
+
+
+Winter [Page 8]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ Datalanguage expressions, which may evaluate to sets as well as to
+ single containers. Now, the left must be a container name, the right
+ may be a container name or a constant.)
+
+ Assignment is defined for all types of containers. When the
+ containers are aggregates, their elements are paired and data is
+ transferred between paired elements. Elements of the target
+ container that do not pair with some source element are handled with
+ a default operation (currently they are filled with blanks).
+
+ The operands of an assignment must have descriptions that match. The
+ idea of matching is that the descriptions must be similar enough so
+ that it is obvious how to map one into the other.
+
+6.1 Conditions for legitimate assignment
+
+ Assignment must reference objects, not sets. An object is:
+ (a) an outermost container, or
+ (b) a constant, or
+ (c) in the body of a FOR-loop, either
+ (c1) a member of a set defined by a FOR-OPERAND, or
+ (c2) a container which occurs once in such a member
+
+ In the case of a reference of type (c1), the object referenced is
+ taken to be the current member. In the case of (c2), the object
+ referenced is that which occurs in the current member. This is
+ explained further in section 7.
+
+ The left operand of an assignment is subject to further
+ restriction. If it is an outermost container, it must be open in
+ either WRITE- or APPEND-mode. If it is not an outermost
+ container, then the reference is of type (c), which means that
+ some FOR-operand has established a context in which the assign-
+ operand is an object. The FOR-operand which establishes this
+ context must be the output-operand of the FOR.
+
+ When the assign-operand is an outermost container, it must be
+ open. Such an operand must be referenced by its simple container
+ ident(***), not its directory pathname.
+
+ In the body of a loop nested in one or more other loops,
+ assignments are further restricted, due to a 0/9 implementation
+ problem. See section 7.2 for details.
+
+
+
+
+
+
+
+
+Winter [Page 9]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ Finally, the descriptions of the operands must match. If one is a
+ constant, then the other must be a STRING(***). If both are
+ containers, then in the expression:
+ A = B;
+ the descriptions of containers A and B match if:
+ 1. A and B have the same type
+ 2. If A and B are LISTs, then they have equal numbers of
+ LIST-members, or else A is an outermost-LIST.
+ 3. If A and B are aggregates, then at least one container
+ immediately enclosed in A matches, and has the same ident as, one
+ container immediately enclosed in B.
+
+6.2 Result of assignment
+
+ If the operands are STRINGs, then the value of B, left-justified,
+ replaces the value of A. If B is longer than A, the value is
+ truncated. If B is shorter than A, then A is filled on the right
+ with blanks as necessary.
+
+ If the operands are STRUCTs, then assignment is defined in terms
+ of the STRUCT members. If a member of A, mA, matches and has the
+ same name as a member of B, mB, then mB is assigned to mA. If no
+ such mB exists, then mA is filled with blanks.
+
+ If the operands are LISTs, the result depends on several factors.
+ First, notice that the descriptions of the LIST-members must
+ match; otherwise the assignment would not be legitimate by the
+ matching rules of 6.1.
+
+ If A is an outermost-LIST, then it can be in either of two modes:
+ WRITE or APPEND. If A is in WRITE-mode, its previous contents are
+ first discarded; it is then handled as though it were in APPEND-
+ mode.
+
+ If A is not an outermost-LIST, then it is always effectively in
+ WRITE-mode.
+
+ After taking the mode of A into account, as described above, the
+ procedure is:
+ for each member of LIST B
+ (a) add a new member to the end of A
+ (b) assign the current number of B to the new member of A
+
+
+
+
+
+
+
+
+
+Winter [Page 10]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+6.3 Deletion of Data Through Assignment
+
+ If A is an outermost container in WRITE-mode, and B is a container
+ with description that matches A, and if B contains no data, then
+ A=B has the effect of deleting all data from A. Note that if A is
+ in APPEND-mode in these circumstances, then A=B is a no-operation
+ (i.e., has no effect).
+
+7. FOR
+
+ FOR <output set spec>, <input set spec> <body> END ;
+
+ The output set is optional: that is, FOR need not produce output.
+ When the output set is omitted, the syntax is:
+
+ FOR <input set spec> <body> END ;
+
+ The operations specified in the body are performed once for each
+ member of the input set. References in the body to the input set
+ member are treated as references to the current input set member.
+ When an output set is present, a new member is created and added to
+ the output set for each iteration (i.e., for each input set member).
+ References to the output set member, similarly, are treated as
+ references to the current output set member.
+
+ The output set spec must be the name of a LIST member. Each
+ iteration of the FOR will create one such member, and add it to its
+ LIST (hereafter called the output LIST). The body terminates the
+ value that the new member receives. Any STRING in the new member
+ which is not given a value by the body receives he default value of
+ all blanks.
+
+ The input set spec must be an expression evaluating to a set of
+ LIST-members (see section 7.1 for details of input set
+ specification). Each iteration for the FOR will input one such
+ member; the FOR will terminate when each member of the set has been
+ processed. The LIST from which the input set members are drawn is
+ called the input LIST.
+
+ FOR is effectively a means of accomplishing variants of assignment
+ between a pair of LISTS. FOR is less concise than assignment, but
+ offers more flexibility. Its advantages are:
+ (a) not all the input LIST-members need be transferred to the
+ output LIST. A subset can be selected by content.
+ (b) the user has explicit control over the assignment of values to
+ output LIST-members.
+
+
+
+
+
+Winter [Page 11]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ This is most easily understood by an example:
+ P PORT LIST F FILE LIST
+ R STRUCT R STRUCT
+ B STR A STRUCT
+ C STR A1 STR
+ END A2 STR
+ B STR
+ C STR
+ END
+
+ (1) P = F ;
+ (2) FOR P.R, F.R
+ P.R = F.R ;
+ END ;
+ (3) FOR P.R, F.R WITH A1 EQ 'XY' OR A2 GE 'AB'
+ B = C ;
+ C = A2 ;
+ END
+
+ Here, (1) and (2) are entirely equivalent requests. However, (3) is
+ quite different and is not expressible as assignment. It selects a
+ subset of F.Rs. The values it gives to the P.Rs could not result
+ from application of the matching rules to F and P.
+
+ Because FOR is effectively assignment between a pair of LISTs, the
+ LISTs referenced by a legitimate FOR-operation are largely subject to
+ the same restrictions as LISTs referenced in an assignment. One
+ exception is that the descriptions of the LIST-members need not
+ match.
+
+ These restrictions are:
+ (a) both LISTs must be objects in the context in which the FOR
+ appears.
+ (b) both LISTs must be open or contained in open outermost
+ containers.
+ (c) if the output LIST is an outermost container, it must be in
+ WRITE- or APPEND-mode.
+ (d) If the output LIST is not outermost, the LIST which most
+ immediately encloses it must be the output LIST of an enclosing
+ FOR.
+
+ The mode of the output LIST of the FOR affects the result much as it
+ would in an assignment: that is, a FOR outputting to a LIST in
+ WRITE-mode overwrites previous contents, while a FOR outputting to a
+ LIST in APPEND-mode adds to previous contents.
+
+
+
+
+
+
+Winter [Page 12]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ CAUTION TO THE READER: For convenience, these specifications use
+ phrases such as 'LISTs referenced by a FOR'. Recall that such a
+ phrase is not literally correct, in the sense that the operands of a
+ FOR are always LIST members, not LISTs.
+
+7.1 Details of input set specification
+
+ The input set is specified by a Datalanguage expression that
+ evaluates to a set of LIST-members. Such an expression can be
+ simply the set of all members of a LIST, or it can be a subset of
+ the members of a LIST, specified by content. For example, with
+ the description:
+
+ F FILE LIST
+ R STRUCT
+ A STR (1)
+ B STR (2)
+ END
+
+ the expression:
+ F.R
+ references all R's on the LIST F. However:
+ F.R WITH A EQ '5'
+ references only those R's containing an A having the value '5'.
+ The expressions permitted as input set specifications are of the
+ form:
+ <list-member-name> WITH <boolexp>
+ The <boolexp> is constructed of comparison expressions joined by
+ the Boolean operators AND and OR. Any expression can be negated
+ with NOT.
+
+ Comparison operators have the highest precedence. Next highest is
+ AND, then OR, then NOT.
+
+ The comparison expressions are restricted to the form:
+ <container name> <comop> <constant>
+ where:
+ (a) <constant> is a string constant enclosed in single quotes
+ (see section 10.2 for a discussion of constants)
+ (b) <comop> is one of six operators:
+ EQ equal
+ NE not equal
+ LT less than
+ GT greater than
+ LE less than or equal to
+ GE greater than or equal to
+ (c) <container name> is the name of a STRING that appears once
+ in each LIST-member.
+
+
+
+Winter [Page 13]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ The constant is truncated or padded with blanks on the right to
+ make it equal in size to the container to which it is being
+ compared. Notice that padding on the right is not always
+ desirable (users will have control over the padding in a future
+ release). In particular, care must be exercised when using
+ numbers in Version 0/9. (A number represented as a STRING should
+ actually be described as a number; eventually it will be possible
+ to do this).
+
+7.2 FOR-body
+
+ Two operations are legitimate in a FOR-body: FOR and assignment.
+
+ These are subject to the restrictions discussed in Section 6.1 and
+ in the introduction to Section 7. The restrictions are related to
+ three requirements: (1) that the names be recognizable (see
+ Section 9 for details), (2) that a request be consistent regarding
+ direction of data transfer between containers, both within itself
+ and with the MODE of outermost containers, and (3) that transfers
+ occur between objects, not sets of objects. The first two
+ requirements are permanent, but will become weaker in later
+ versions of the language. The last requirement is temporary and
+ will be present only in early versions.
+
+ Due to an implementation problem associated with Version 0/9,
+ there is a somewhat bizarre restriction applied to references made
+ in the body of a loop nested in another loop. This restriction is
+ not expected to pose any practical problems for users, and is not
+ part of the language design, but is discussed here for
+ completeness.
+
+ The restriction is most easily understood by example:
+
+ given the description
+ F LIST
+ R STRUCT
+ A STR (3)
+ BL LIST (3)
+ B STR (3)
+ C STR (3)
+ END
+ and the request fragment:
+ FOR ...,R
+ FOR ...,B
+ ... = A ;
+ ... = C ;
+ END
+ END
+
+
+
+Winter [Page 14]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ observe:
+ (a) The outer loop processes the set of R's in F.
+ (b) For each R in F, the inner loop processes the set of B's in
+ the BL contained in that R.
+ (c) In the body of the inner loop, there are references to A and
+ C, which do not occur in B, but do occur in R. That is, the
+ objects referenced in the inner loop body are defined by the
+ outer loop, not the inner loop. In general, this is fine;
+ in the case of C, however, we have a problem.
+ (d) C occurs beyond the end of BL.
+
+ The 0/9 compiler is capable of neither (1) looking ahead enough to
+ locate C before it compiles code for the loop, nor (2) while
+ generating code to loop on the B's in BL, generating a separate
+ body of code that skips to the end of BL to locate C. Thus it can
+ handle A, which has been located before it begins loop generation,
+ but it cannot handle C, which requires a little foresight.
+
+ The request fragment shown would not cause problems if the
+ description were changed to:
+
+ F LIST
+ R STRUCT
+ A STR (3)
+ C STR (3)
+ BL LIST (3)
+ B STR (3)
+ END
+
+ Then both A and C would have been found before code for the inner
+ loop was generated.
+
+8. Data Transmission
+
+ Data is transferred from container to container by execution of
+ assignment and FOR operations. The outermost containers involved in
+ transfers can be files or ports. If both are files, then the
+ transfer is internal to the Datacomputer. If either is a port, then
+ an address in the external world is needed to accomplish the data
+ transmission.
+
+
+
+
+
+
+
+
+
+
+
+Winter [Page 15]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ Such an address is supplied through a CONNECT-request, which
+ associates a container (having a function of PORT) with an external
+ address:
+ CONNECT <ident> TO <address> ;
+ Here <address> is either a specifications of host and socket number,
+ or a TENEX file designator (for CCA's TENEX) enclosed in single
+ quotes. The host and socket form is:
+ <socket> AT <host>
+ where <socket> is a decimal number, and <host> is either a decimal
+ number or a standard host name (since standard host names don't exist
+ right now, it has to be the TENEX 'standard' name for the host.
+ Contact the author for the latest list.) If <host> is omitted, it is
+ taken to be the host from which the Datalanguage is being
+ transmitted.
+
+ The address associated with a port can be changed by issuing another
+ CONNECT-request.
+
+ A DISCONNECT-request simply breaks an existing port/address
+ association without establishing a new one. (A CLOSE-request that
+ references an open port executes a DISCONNECT.) The syntax of
+ DISCONNECT is:
+ DISCONNECT <ident> ;
+
+ A port is disconnected when: (a) no successful CONNECT-request has
+ ever been issued for it, or (b) a DISCONNECT for the port has been
+ executed since the last successful CONNECT.
+
+ When a disconnected port is referenced in an assignment, it is
+ connected by default either to:
+ (a) the connection used for the transmission of Datalanguage to the
+ Datacomputer, or
+ (b) the connection used for the transmission of Datacomputer
+ diagnostics to the user
+ The choice between (a) and (b), of course, depends on whether the
+ reference is for input or output. These connections are established
+ by the network user's ICP to the Datacomputer at the beginning of the
+ session.
+
+ Note that CONNECT and DISCONNECT do not open files or network
+ connections. They simply make address associations within the
+ Datacomputer. The files and connections are opened before each
+ request and closed after each request.
+
+
+
+
+
+
+
+
+Winter [Page 16]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+9. Names in Datalanguage
+
+ A name is recognized when it has been associated with a particular
+ data container or set of containers.
+
+ Datalanguage has mechanisms for the recognition of names in contexts.
+ That is, the meaning of the name is related to where it appears.
+
+ This makes it possible to attach natural meanings to partially
+ qualified names.
+
+ For example:
+
+ WEATHER FILE LIST
+ STATION STRUCT
+ CITY STR (15)
+ STATE STR (15)
+ DATA LIST (24)
+ OBSERVATION STRUCT
+ HOUR STR (2)
+ TEMPERATURE STR (3)
+ HUMIDITY STR (2)
+ PRESSURE STR (4)
+ END
+ END
+
+ RESULTS PORT LIST
+ RESULT STRUCT
+ CITY STR (15)
+ HOUR STR (2)
+ TEMPERATURE STR (3)
+ END
+
+ FOR STATION WITH STATE EQ 'CALIFORNIA'
+ FOR RESULT, OBSERVATION WITH HOUR GT '12'
+ AND HUMIDITY LT '75'
+ CITY = CITY ;
+ HOUR = HOUR ;
+ TEMPERATURE = TEMPERATURE ;
+ END ;
+ END ;
+
+ in the assignment 'CITY = CITY', the first CITY is understood to be
+ RESULT.CITY and the second is understood to be STATION.CITY.
+
+
+
+
+
+
+
+Winter [Page 17]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+9.1 Informal Presentation of Recognition Rules
+
+ 'Ident' is used in the sense of section 3. For example, in the
+ description:
+ F FILE LIST R STRUCT A STR (1) B STR (1) END
+ F, R, A and B are idents.
+
+ A context is a tree whose nodes are idents. In such a tree, the
+ terminal nodes are idents of STRINGs. The ident of a LIST is
+ superior to the ident of the LIST-member. The ident of a STRUCT
+ is superior to the idents of the STRUCT elements. The context
+ whose top node is F is said to be the context of F.
+
+ +-----+
+ ! F !
+ +-----+
+ !
+ !
+ +-----+
+ ! R !
+ +-----+
+ !
+ !
+ +----------+----------+
+ ! !
+ ! !
+ +-----+ +-----+
+ ! A ! ! B !
+ +-----+ +-----+
+
+
+
+ Figure 9.1-1 The context of F
+
+ A pathname is a sequence of idents, naming nodes along a path from
+ one node to another. A full pathname in the context starts at the
+ topmost node. Thus F.R.B is a full pathname in the context of F.
+ A partial pathname starts at a node other than the topmost node
+ (e.g. R.B, B).
+
+ In Datalanguage, pathnames omitting intermediate nodes, such as
+ F.B (which omits 'R'), are not permitted. Thus partial pathnames
+ are partial only in that additional names are implied on the left.
+
+
+
+
+
+
+
+
+Winter [Page 18]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ Three attempts at recognition of a pathname, PN, in a context, CX,
+ are made:
+
+ (a) recognition of PN as a full pathname in CX
+ (b) recognition of PN as a partial pathname in which only the
+ topmost node of CX is omitted
+ (c) recognition of PN as an arbitrary partial pathname occurring
+ only once in CX.
+
+ The attempts are made in the above order, and the recognition
+ process halts with the first successful attempt.
+
+ As an example, consider the description:
+
+ F FILE LIST
+ R STRUCT
+ A STR
+ B STR
+ S STRUCT
+ R STR
+
+ which defines the context in Figure 9.1-2.
+
+
+ +-----+
+ ! F !
+ +-----+
+ !
+ !
+ +-----+
+ ! R !
+ +-----+
+ !
+ !
+ +----------------+----------------+
+ ! ! !
+ ! ! !
+ +-----+ +-----+ +-----+
+ ! A ! ! B ! ! S !
+ +-----+ +-----+ +-----+
+ !
+ !
+ +-----+
+ ! R !
+ +-----+
+
+ Figure 9.1-2 Example Context
+
+
+
+
+Winter [Page 19]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ In this context, F.R.A is a full pathname. Thus, F.R.A is
+ recognized in attempt (a). R is a partial pathname in which only
+ the topmost node is omitted. Thus R is recognized in attempt (b).
+ Note carefully that R is recognized as a reference to F.R, not to
+ F.R.S.R. Finally, B is an arbitrary partial pathname occurring
+ only once in the context. Thus B is recognized in attempt (c).
+
+ Two stacks of contexts are maintained: one for names used in an
+ input sense, and one for names used in an output sense. When a
+ name is to be recognized, it is first decided whether the
+ reference is an input reference or an output reference. An input
+ reference is (a) the right hand operand of an assign, or (b) a
+ name in the input set spec of a FOR. An output reference is (a)
+ the left operand of an assign, or (b) the output operand of a FOR.
+ The first context on the appropriate context stack is then
+ searched, according to the procedure outlined on the previous
+ page. If the name is neither recognized nor ambiguous in that
+ context, search continues in the next context on the stack. If
+ the name can be recognized in none of the contexts on the
+ appropriate stack, it is unrecognizable.
+
+ When a stack is empty, the recognition procedure is different.
+ The search is carried on in a special context: The context of
+ %OPEN. Its top node, %OPEN, is a built in system ident.
+ Subordinate to %OPEN is a context for each open directory node.
+ Each such context represents all the idents defined in the
+ directory nodes having data descriptions:
+ F FILE LIST R STRUCT A STR (1) B STR (1)
+ and:
+ P PORT LIST R STRUCT A STR (1) B STR (1)
+ then the context of %OPEN would be as in Figure 9.1-3.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Winter [Page 20]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ +-------+
+ ! %OPEN !
+ +-------+
+ !
+ !
+ +-----------+-----------+
+ ! !
+ ! !
+ +-----+ +-----+
+ ! A ! ! S !
+ +-----+ +-----+
+ ! !
+ ! !
+ +-----+ +-----+
+ ! R ! ! R !
+ +-----+ +-----+
+ ! !
+ ! !
+ +-----+-----+ +-----+-----+
+ ! ! ! !
+ ! ! ! !
+ +-----+ +-----+ +-----+ +-----+
+ ! A ! ! B ! ! A ! ! B !
+ +-----+ +-----+ +-----+ +-----+
+
+
+ Figure 9.1-3 The Context of %OPEN
+
+ When a directory node is closed, the corresponding context is
+ removed from the context of %OPEN. When a node is opened, the
+ associated context is added as the rightmost context subordinate
+ to %OPEN.
+
+9.2 Context Stack Maintenance
+
+ The context stacks are always empty between requests. The FOR-
+ operator adds entries to the stacks. FOR A adds the context of A
+ to the input context stack. FOR A, B ... adds the context of A to
+ the output stack and the context of B to the input stack.
+
+ When adding to an empty stack, FOR adds two contexts instead of
+ one. The second addition to the stack is the context of the
+ looparg; the first addition is the context of the outermost
+ container which encloses the looparg.
+
+
+
+
+
+
+
+Winter [Page 21]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ For example, given a context of %OPEN as in Figure 9.1-3, and
+ empty context stacks, the fragment 'FOR F.R ...' adds two
+ contexts: (1) the context of F, and (2) the context of F.R.
+
+ Contexts are removed from the stacks by the END matching the FOR
+ which added them.
+
+10. Miscellaneous Topics
+
+10.1 The LIST-request
+
+ The LIST-request provides a means for the user to inspect system
+ data of interest to him. The user can determine the contents of
+ the directory, the source or parsed form of any data description
+ in the system, and the mode and connection status of any open file
+ or port.
+
+ The LIST operator has a single operand, which can have any of
+ several forms. The action of the operator is to output a list of
+ values on the Datalanguage output port.
+
+ To output a list of pathnames, the operand used is '%ALL'. When
+ '%ALL' appears alone, all pathnames in the directory are listed.
+ When '%ALL' appears after the last ident in a directory pathname,
+ the full pathnames of all nodes subordinate to the named node are
+ listed.
+
+ To output one or more source descriptions, the operand '.%SOURCE'
+ is used. '.%SOURCE' is preceded with one of (a) '%ALL', (b)
+ '%OPEN', or (c) the ident of an open outermost container. The
+ output is either (a) all descriptions, (b) all open descriptions,
+ or (c) a particular open description.
+
+ To output a parsed description, the operand '.%DESC' is used
+ ('%DESCRIPTION' is also accepted). This operand is preceded
+ either with (a) '%OPEN', or (b) the ident of an open outermost
+ container.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Winter [Page 22]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ Examples:
+
+ Let P be the ident of an open PORT. Let A.B.C be a
+ directory pathname.
+ LIST %ALL
+ LIST A.B.C.%ALL
+ LIST %OPEN
+ LIST %ALL.%SOURCE
+ LIST %OPEN.%SOURCE
+ LIST P.%SOURCE
+ LIST %OPEN.%DESC
+ LIST P.%DESC
+
+ Note that 'LIST A.B.C.%SOURCE' is not legal - '.%SOURCE'
+ must be preceded with the ident of an open container, not a
+ pathname. A similar restriction applies to '.%DESC'.
+
+10.2 Constants in Datalanguage
+
+ A constant of type STRING can be included in a Datalanguage
+ request by enclosing it in single quotes:
+ 'ABC'
+ A single quote is included in a constant by preceding it with a
+ double quote:
+ 'FATHER"'S'
+ Likewise, a double quote is included by preceding it with a double
+ quote:
+ 'JOHN SAID ""HELLO""'
+
+ Such constants can be used on the right of comparison operators
+ and of assignment operators which reference strings.
+
+ Eventually, Datalanguage will contain facilities for the inclusion
+ of constants of all datatypes; such constants are simply a special
+ case of the Datalanguage expression and will be permitted wherever
+ such expressions are permitted.
+
+10.3 Character Set
+
+ Internally, Version 0/9 of the Datacomputer software operates in
+ 7-bit ASCII characters. Its output to the ARPANET is converted to
+ 8-bit ASCII. On input from the ARPANET, it expects 8-bit
+ characters, which it converts to 7-bit characters.
+
+
+
+
+
+
+
+
+Winter [Page 23]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ To convert from 7- to 8-bit characters, a '0' bit is prefixed. To
+ convert from 8- to 7-bit characters, the high-order bit is
+ checked. If the high-order bit is a '0', the bit is discarded and
+ the character is accepted as a 7-bit character. If the high-order
+ bit is a '1', then the character is discarded.
+
+ (In the following discussion, as elsewhere in this memo, all
+ references to numerical character codes are in decimal).
+
+ The remainder of this section discusses treatment of codes 0
+ through 127, when they appear in Datalanguage requests.
+
+ In general, printing characters are acceptable in requests, while
+ control characters are not. There are some exceptions, which are
+ detailed below. The printing characters are codes 32-126. The
+ control characters are codes 0-31 and 127.
+
+ Certain control characters are accepted:
+
+ Tab(9) is accepted freely in requests. It functions as a
+ separator (explained below).
+
+ EOL(31), meaning end-of-line, is accepted in requests,
+ functioning both as a separator and an activator (a). EOL has
+ a special meaning in data, and should not be introduced into
+ STRING constants(***).
+
+ Control-L(12) is an activator and a high-level request
+ delimiter. It terminates the test of any request being
+ processed when it is encounter in the input stream. It is
+ useful in Datacomputer-user program synchronization.
+
+ Control-Z(26) means end-of-session when encountered in
+ Datalanguage. It has the properties of control-L, and in
+ addition, causes the Datacomputer to execute an end-of-session
+ procedure, which results in closing the Datalanguage
+ connections, closing any open files or ports, etc. The effect
+ is equivalent to a [LOGOUT(which] does not exist yet).
+
+ The two-character sequence <carriage return(13), line feed(10)>
+ is equivalent to EOL (and is translated to EOL on input from
+ the network). The reverse sequence, as well as either
+ character alone, is treated simply as other control characters
+ (ignored).
+
+ All other control characters are ignored.
+
+
+
+
+
+Winter [Page 24]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ The printing characters are further divided into four groups:
+ special characters, uppercase letters, lower case letters, and
+ digits (the membership of these groups is defined in section 11).
+
+ Corresponding upper and lower case letters are equivalent in
+ requests, except with quoted strings.
+
+ Certain special characters have a lexical function, which is
+ either break or separator. A break character terminates the
+ current lexical item and returned itself as the next item. A
+ separator character terminates the current item but does not begin
+ a new item (i.e., its only function is to separate items).
+ Multiple separators are equivalent to a single separator. A
+ separator can always be inserted before or after a break
+ character, without altering the meaning of the request.
+
+ The separators are tab(9), space(32), and end-of-line(31).
+
+ The break characters are left parenthesis(40), right
+ parenthesis(41), equals(61), semicolon(59), period(46), comma(44),
+ quote(39), and slash(47).
+
+ (a) An activator character causes the Datacomputer to process
+ whatever has been received since the previous activator or
+ the beginning of the request. The meaning of a request is
+ independent of the presence/absence of activators. However,
+ a request will not be executed until an activator beyond the
+ end of the request is received.
+
+ While Version 0/9 defines (carriage return, linefeed) in terms of
+ EOL, network users should not think in terms of sending EOL's to
+ the Datacomputer over the network. EOL is not part of the network
+ ASCII character set, and has no definite permanent place in
+ Datacomputer implementation plans.
+
+10.4 Comments
+
+ Comments can be included in Datalanguage requests. A comment is
+ begun with the two-character sequence '/*', and ended with the
+ two-character sequence '*/'. Since slash is a break character, a
+ comment does cause a lexical break; its overall effect is that of
+ a separator.
+
+
+
+
+
+
+
+
+
+Winter [Page 25]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+10.5 Reserved Identifiers
+
+ Certain identifiers are reserved in Datalanguage, and should not
+ be used to name containers or directory nodes. These are:
+
+ AND
+ APPEND
+ AT
+ CLOSE
+ CONNECT
+ CREATE
+ DELETE
+ DISCONNECT
+ END
+ EQ
+ FILE
+ FOR
+ GE
+ GT
+ LE
+ LIST
+ LT
+ NODE
+ NE
+ NOT
+ OPEN
+ OR
+ PORT
+ READ
+ STR
+ STRUCT
+ TO
+ WITH
+ WRITE
+
+ More reserved identifiers will be added in Version 0/10.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Winter [Page 26]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+11. Datalanguage Syntax Expressed in BNF
+
+11.1 Requests
+
+ 11.1.01 <request> ::= ;
+ 11.1.02 <request> ::= <create>
+ 11.1.03 <request> ::= OPEN <pn> ;
+ 11.1.04 <request> ::= OPEN <pn> <mode> ;
+ 11.1.05 <request> ::= CLOSE <ident> ;
+ 11.1.06 <request> ::= CONNECT <ident> TO <address> ;
+ 11.1.07 <request> ::= DISCONNECT <ident> ;
+ 11.1.08 <request> ::= MODE <ident> <mode> ;
+ 11.1.09 <request> ::= DELETE <pn> ;
+ 11.1.10 <request> ::= LIST <listarg> ;
+ 11.1.11 <request> ::= <sr-request> ;
+
+11.2 Data Description and Creation
+
+ 11.2.01 <create> ::= CREATE <pn>
+ 11.2.02 <create> ::= CREATE <pn> <ftn> LIST <desc>
+ 11.2.03 <create> ::= CREATE <pn> <ftn> LIST <size> <desc>
+
+ 11.2.04 <desc> ::= <ident> <attributes>
+
+ 11.2.05 <attributes> ::= LIST <size> <desc>
+ 11.2.06 <attributes> ::= STRUCT <descs> END
+ 11.2.07 <attributes> ::= STR <size>
+ 11.2.08 <attributes> ::= STR <size> ,I=D
+
+ 11.2.09 <descs> ::= <desc>
+ 11.2.10 <descs> ::= <descs> <desc>
+
+ 11.2.11 <ftn> ::= PORT
+ 11.2.12 <ftn> ::= FILE
+ 11.2.13 <ftn> ::= TEMP PORT
+ 11.2.14 <ftn> ::= TEMPORARY PORT
+
+ 11.2.15 <size> ::= ( <integer constant> )
+
+
+
+
+
+
+
+
+
+
+
+
+
+Winter [Page 27]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+11.3 Data Storage and Retrieval
+
+ 11.3.01 <sr-request> ::= <assign>
+ 11.3.01 <sr-request> ::= <loop>
+
+ 11.3.03 <assign> ::= <pn> = <object>
+
+ 11.3.04 <loop> ::= FOR <looparg> <loopbody> END
+
+ 11.3.05 <looparg> ::= <exp>
+ 11.3.06 <looparg> ::= <pn> , <exp>
+
+ 11.3.07 <loopbody> ::= <sr-request>
+ 11.3.08 <loopbody> ::= <loopbody1> <sr-request>
+ 11.3.09 <loopbody> ::= <loopbody1>
+
+ 11.3.10 <loopbody1> ::= <sr-request> ;
+ 11.3.11 <loopbody1> ::= <loopbody1> <sr-request> ;
+
+11.4 Expressions
+
+ 11.4.01 <exp> ::= <pn>
+ 11.4.02 <exp> ::= <pn> WITH <boolexp>
+
+ 11.4.03 <boolexp> ::= <pn> <comop> <string constant>
+ 11.4.04 <boolexp> ::= ( <boolexp> )
+ 11.4.05 <boolexp> ::= NOT <boolexp>
+ 11.4.06 <boolexp> ::= <boolexp> AND <boolexp>
+ 11.4.07 <boolexp> ::= <boolexp> OR <boolexp>
+
+ 11.4.08 <comop> ::= EQ
+ 11.4.09 <comop> ::= NE
+ 11.4.10 <comop> ::= GT
+ 11.4.11 <comop> ::= LT
+ 11.4.12 <comop> ::= GE
+ 11.4.13 <comop> ::= LE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Winter [Page 28]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+11.5 Miscellaneous
+
+ 11.5.01 <address> ::= <quote> <TENEX file designator>
+ <quote>
+ 11.5.02 <address> ::= <socket> AT <host>
+ 11.5.03 <address> ::= <socket>
+
+ 11.5.04 <socket> ::= <integer constant> //INTERPRETED AS
+ DECIMAL
+
+ 11.5.05 <host> ::= <integer constant> //INTERPRETED AS
+ DECIMAL
+ 11.5.06 <host> ::= ***** TENEX host names *****
+
+ 11.5.07 <object> ::= <pn>
+ 11.5.08 <object> ::= <string constant>
+
+ 11.5.09 <mode> ::= READ
+ 11.5.10 <mode> ::= APPEND
+ 11.5.11 <mode> ::= WRITE
+
+ 11.5.12 <listarg> ::= %ALL
+ 11.5.13 <listarg> ::= <pn>.%ALL
+ 11.5.14 <listarg> ::= %OPEN
+ 11.5.15 <listarg> ::= %ALL.%SOURCE
+ 11.5.16 [<LISTARG>] ::= <IDENT>.%SOURCE
+ 11.5.17 <listarg> ::= %OPEN.%SOURCE
+ 11.5.18 <listarg> ::= %OPEN.%DESC
+ 11.5.19 <listarg> ::= <ident>.%DESC
+
+ 11.5.20 <pn> ::= <ident>
+ 11.5.21 <pn> ::= <pn>.<ident>
+
+ 11.5.22 <ident> ::= <letter>
+ 11.5.23 <ident> ::= <ident> <letter>
+ 11.5.24 <ident> ::= <ident> <digit>
+
+ 11.5.25 <integer constant> ::= <digit>
+ 11.5.26 <integer constant> ::= <integer constant> <digit>
+
+ 11.5.27 <string constant> ::= <quote> <string conbody>
+ <quote>
+
+ 11.5.28 <string conbody> ::= <nonquote>
+ 11.5.28 <string conbody> ::= <string conbody> <nonquote>
+
+
+
+
+
+
+Winter [Page 29]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+11.6 Character Set
+
+ 11.6.01 <separator> ::= //SPACE(32)
+ 11.6.02 <separator> ::= //TAB(9)
+ 11.6.03 <separator> ::= <eol>
+
+ 11.6.04 <special> ::= <quote>
+ 11.6.05 <special> ::= <superquote>
+ 11.6.06 <special> ::= <special1>
+
+ 11.6.07 <letter> ::= A
+ 11.6.08 <letter> ::= B
+ ...............
+ 11.6.09 <letter> ::= Z
+
+ 11.6.10 <letter> ::= a
+ 11.6.11 <letter> ::= b
+ ...............
+ 11.6.12 <letter> ::= z
+
+ 11.6.13 <digit> ::= 0
+ 11.6.14 <digit> ::= 1
+ ...............
+ 11.6.15 <digit> ::= 9
+
+ 11.6.16 <nonquote> ::= <letter>
+ 11.6.17 <nonquote> ::= <digit>
+ 11.6.18 <nonquote> ::= <superquote> <quote>
+ 11.6.19 <nonquote> ::= <superquote> <superquote>
+ 11.6.20 <nonquote> ::= <special1>
+ 11.6.21 <nonquote> ::= <separator>
+
+ 11.6.22 <eol> ::= //EOL (31)
+ 11.6.23 <eol> ::= <carriage return> <line feed>
+
+ 11.6.24 <carriage return> ::= //CARRIAGE RETURN (13)
+ 11.6.25 <line feed> ::= //LINE FEED (10)
+
+ 11.6.26 <quote> ::= ' //SINGLE QUOTE(44)
+
+ 11.6.27 <superquote> ::= " //DOUBLE QUOTE(34)
+
+ 11.6.28 <special1> ::= ! //EXCLAMATION POINT(33)
+ 11.6.29 <special1> ::= # //NUMBER SIGN(35)
+ 11.6.30 <special1> ::= $ //DOLLAR SIGN(36)
+ 11.6.31 <special1> ::= % //PERCENT SIGN(37)
+ 11.6.32 <special1> ::= & //AMPERSAND(38)
+ 11.6.33 <special1> ::= ( //LEFT PARENTHESIS(40)
+
+
+
+Winter [Page 30]
+
+RFC 515 Specifications for Datalanguage, Version 0/9 6 June 1973
+
+
+ 11.6.34 <special1> ::= ) //RIGHT PARENTHESIS(41)
+ 11.6.35 <special1> ::= * //ASTERISK(42)
+ 11.6.36 <special1> ::= + //PLUS SIGN(43)
+ 11.6.37 <special1> ::= , //COMMA(44)
+ 11.6.38 <special1> ::= - //MINUS SIGN(45)
+ 11.6.39 <special1> ::= . //PERIOD(46)
+ 11.6.40 <special1> ::= / //SLASH(47)
+ 11.6.41 <special1> ::= : //COLON(58)
+ 11.6.42 <special1> ::= ; //SEMICOLON(59)
+ 11.6.43 <special1> ::= < //LEFT ANGLE BRACKET(60)
+ 11.6.44 <special1> ::= = //EQUAL SIGN(61)
+ 11.6.45 <special1> ::= > //RIGHT ANGLE BRACKET(62)
+ 11.6.46 <special1> ::= ? //QUESTION MARK(63)
+ 11.6.47 <special1> ::= @ //AT-SIGN(64)
+ 11.6.48 <special1> ::= [ //LEFT SQUARE BRACKET(91)
+ 11.6.49 <special1> ::= //BACK SLASH(92)
+ 11.6.50 <special1> ::= ] //RIGHT SQUARE BRACKET(93)
+ 11.6.51 <special1> ::= ^ //CIRCUMFLEX(94)
+ 11.6.52 <special1> ::= _ //UNDERBAR(95)
+ 11.6.53 <special1> ::= ` //ACCENT GRAVE(96)
+ 11.6.54 <special1> ::= { //LEFT BRACE(123)
+ 11.6.55 <special1> ::= | //VERTICAL BAR(124)
+ 11.6.56 <special1> ::= } //RIGHT BRACE(125)
+ 11.6.57 <special1> ::= ~ //TILDE(126)
+
+ <EOF>
+
+
+ [ This RFC was put into machine readable form for entry ]
+ [ into the online RFC archives by Walter Benton 12/98 ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Winter [Page 31]
+