--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bnf.rst Mon Feb 22 12:46:36 2016 +0200
@@ -0,0 +1,52 @@
+.. -*- coding: utf-8; -*-
+.. include:: HEADER.rst
+
+=====
+ BNF
+=====
+
+What is BNF?
+============
+.. contents::
+ :local:
+
+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).
+
+See: :rfc:`2234`.
+
+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.
+ ``"abc..."``
+ 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 } """
+