bnf.rst
author Oleksandr Gavenko <gavenkoa@gmail.com>
Sat, 30 Jun 2012 17:46:01 +0300
changeset 1312 a468648775f8
parent 418 3a5d2c76aa30
permissions -rw-r--r--
99 bottles of beer.

-*- mode: outline; coding: utf-8 -*-

* What is BNF?

BNF is an acronym for "Backus Naur Form". John Backus and Peter Naur
introduced for the first time a formal notation to describe the syntax of a
given language (ALGOL 60 programming language).

  rfc2234

* BNF syntax.

The meta-symbols of BNF are:

  ::=
    meaning "is defined as"
  |
    meaning "or"
  < >
    angle brackets used to surround category names (some times skipped).
  [  ]
    optional items are enclosed in.
  { }
    repetitive items (zero or more times) are enclosed in.
  " "
    terminals are enclosed in to distinguish them from meta-symbols.

* BNF in BNF.

  syntax     ::=  { rule }
  rule       ::=  identifier  "::="  expression
  expression ::=  term { "|" term }
  term       ::=  factor { factor }
  factor     ::=  identifier |
                  quoted_symbol |
                  "("  expression  ")" |
                  "["  expression  "]" |
                  "{"  expression  "}"
  identifier ::=  letter { letter | digit }
  quoted_symbol ::= """ { any_character } """