|
Macintosh Development |
[Home]
[About Us]
[People]
[Information Systems]
[Kerberos for Macintosh]
[Applications]
[Miscellaneous Documentation]
Augmented BNF
by Miro Jurisic
This document describes an augmented Bachus-Naur form, similar to
the one used in RFC 1945.
Constructs
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 ("I") 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.
Basic Rules
The following rules are used to describe basic parsing constructs.
The US-ASCII coded character set is defined by ANSI X3.4-1986.
OCTET = <any 8-bit sequence of data>
CHAR = <any US-ASCII character (octets 0 - 127)>
UPALPHA = <any US-ASCII uppercase letter "A".."Z">
LOALPHA = <any US-ASCII lowercase letter "a".."z">
ALPHA = UPALPHA | LOALPHA
DIGIT = <any US-ASCII digit "0".."9">
CTL = <any US-ASCII control character (octets 0 - 31) and DEL
(127)>
CR = <US-ASCII CR, carriage return (13)>
LF = <US-ASCII LF, linefeed (10)>
SP = <US-ASCII SP, space (32)>
HT = <US-ASCII HT, horizontal-tab (9)>
<"> = <US-ASCII double-quote mark (34)>
CRLF = CR LF
LWS = [CRLF] 1*( SP | HT )
TEXT = <any OCTET except CTLs, but including LWS>
HEX = "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" |
"e" | "f" | DIGIT
word = token | quoted-string
token = 1*<any CHAR except CTLs or tspecials>
tspecials = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" |
"\" | <"> | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT
comment = "(" *( ctext | comment ) ")"
ctext = <any TEXT excluding "(" and ")">
quoted-string = ( <"> *(qdtext) <"> )
qdtext = <any CHAR except <"> and CTLs, but including
LWS>
Questions or comments? Send mail to macdev@mit.edu
Last updated on $Date: 2003/11/18 21:57:54 $
Last modified by $Author: smcguire $