backus-naur form

from The Free On-line Dictionary of Computing (8 July 2008)
Backus-Naur Form
Backus Normal Form

   <language, grammar> (BNF, originally "Backus Normal Form") A
   formal {metasyntax} used to express {context-free grammars}.
   Backus Normal Form was renamed Backus-Naur Form at the
   suggestion of {Donald Knuth}.

   BNF is one of the most commonly used metasyntactic notations
   for specifying the {syntax} of programming languages, command
   sets, and the like.  It is widely used for language
   descriptions but seldom documented anywhere (how do you
   document a {metasyntax}?), so that it must usually be learned
   by osmosis (but see {RFC 2234}).

   Consider this BNF for a US postal address:

    <postal-address> ::= <name-part> <street-address> <zip-part>

    <personal-part> ::= <name> | <initial> "."

    <name-part> ::= <personal-part> <last-name> [<jr-part>] <EOL>
   	       | <personal-part> <name-part>

    <street-address> ::= [<apt>] <house-num> <street-name> <EOL>

    <zip-part> ::= <town-name> "," <state-code> <ZIP-code> <EOL>

   This translates into English as: "A postal-address consists of
   a name-part, followed by a street-address part, followed by a
   zip-code part.  A personal-part consists of either a first
   name or an initial followed by a dot.  A name-part consists of
   either: a personal-part followed by a last name followed by an
   optional "jr-part" (Jr., Sr., or dynastic number) and
   end-of-line, or a personal part followed by a name part (this
   rule illustrates the use of recursion in BNFs, covering the
   case of people who use multiple first and middle names and/or
   initials).  A street address consists of an optional apartment
   specifier, followed by a street number, followed by a street
   name.  A zip-part consists of a town-name, followed by a
   comma, followed by a state code, followed by a ZIP-code
   followed by an end-of-line."

   Note that many things (such as the format of a personal-part,
   apartment specifier, or ZIP-code) are left unspecified.  These
   lexical details are presumed to be obvious from context or
   specified somewhere nearby.

   There are many variants and extensions of BNF, possibly
   containing some or all of the {regexp} {wild cards} such as
   "*" or "+".  {EBNF} is a common one.  In fact the example
   above isn't the pure form invented for the {ALGOL 60} report.
   "[]" was introduced a few years later in {IBM}'s {PL/I}
   definition but is now universally recognised.  {ABNF} is
   another extension.

   (1997-11-23)
    

[email protected]