Connected: An Internet Encyclopedia
2.1 Augmented BNF
Up:
Connected: An Internet Encyclopedia
Up:
Requests For Comments
Up:
RFC 2068
Up:
2 Notational Conventions and Generic Grammar
Prev: 2 Notational Conventions and Generic Grammar
Next: 2.2 Basic Rules
2.1 Augmented BNF
2.1 Augmented BNF
All of the mechanisms specified in this document are described in
both prose and an augmented Backus-Naur Form (BNF) similar to that
used by RFC 822 [9]. Implementers will need to be familiar with the
notation in order to understand this specification. The augmented BNF
includes the following constructs:
- name = definition
-
The name of a rule is simply the name itself (without any enclosing
"<" and ">") and is separated from its definition by the equal "="
character. Whitespace is only significant in that indentation of
continuation lines is used to indicate a rule definition that spans
more than one line. Certain basic rules are in uppercase, such as
SP, LWS, HT, CRLF, DIGIT, ALPHA, etc. Angle brackets are used
within definitions whenever their presence will facilitate
discerning the use of rule names.
- "literal"
-
Quotation marks surround literal text. Unless stated otherwise, the
text is case-insensitive.
- rule1 | rule2
-
Elements separated by a bar ("|") are alternatives, e.g., "yes |
no" will accept yes or no.
- (rule1 rule2)
-
Elements enclosed in parentheses are treated as a single element.
Thus, "(elem (foo | bar) elem)" allows the token sequences "elem
foo elem" and "elem bar elem".
- *rule
-
The character "*" preceding an element indicates repetition. The
full form is "<n>*<m>element" indicating at least <n> and at most
<m> occurrences of element. Default values are 0 and infinity so
that "*(element)" allows any number, including zero; "1*element"
requires at least one; and "1*2element" allows one or two.
- [rule]
-
Square brackets enclose optional elements; "[foo bar]" is
equivalent to "*1(foo bar)".
- N rule
-
Specific repetition: "<n>(element)" is equivalent to
"<n>*<n>(element)"; that is, exactly <n> occurrences of (element).
Thus 2DIGIT is a 2-digit number, and 3ALPHA is a string of three
alphabetic characters.
- #rule
-
A construct "#" is defined, similar to "*", for defining lists of
elements. The full form is "<n>#<m>element " indicating at least
<n> and at most <m> elements, each separated by one or more commas
(",") and optional linear whitespace (LWS). This makes the usual
form of lists very easy; a rule such as "( *LWS element *( *LWS ","
*LWS element )) " can be shown as "1#element". Wherever this
construct is used, null elements are allowed, but do not contribute
to the count of elements present. That is, "(element), , (element)
" is permitted, but counts as only two elements. Therefore, where
at least one element is required, at least one non-null element
must be present. Default values are 0 and infinity so that
"#element" allows any number, including zero; "1#element" requires
at least one; and "1#2element" allows one or two.
- ; comment
-
A semi-colon, set off some distance to the right of rule text,
starts a comment that continues to the end of line. This is a
simple way of including useful notes in parallel with the
specifications.
- implied *LWS
-
The grammar described by this specification is word-based. Except
where noted otherwise, linear whitespace (LWS) can be included
between any two adjacent words (token or quoted-string), and
between adjacent tokens and delimiters (tspecials), without
changing the interpretation of a field. At least one delimiter
(tspecials) must exist between any two tokens, since they would
otherwise be interpreted as a single token.
Next: 2.2 Basic Rules
Connected: An Internet Encyclopedia
2.1 Augmented BNF