Метаязык, предложенный Бэкусом и Науром, впервые использовался для описания синтаксиса реального языка программирования Алгол 60. Наряду с новыми обозначениями метасимволов, в нем использовались содержательные обозначения нетерминалов. Это сделало описание языка нагляднее и позволило в дальнейшем широко использовать данную нотацию для описания реальных языков программирования. Были использованы следующие обозначения:
– символ «::=» отделяет левую часть правила от правой;
– нетерминалы обозначаются произвольной символьной строкой, заключенной в угловые скобки «<» и «>»;
– терминалы – это символы, используемые в описываемом языке;
– каждое правило определяет порождение нескольких альтернативных цепочек, отделяемых друг от друга символом вертикальной черты «|».
Пример описания идентификатора с использованием БНФ:
1. <буква>::= А|В|С|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
2. <цифра>::= 0|1|2|3|4|5|6|7|8|9
3. <идентификатор>::= <буква> | <идентификатор> <буква> |
<идентификатор> <цифра>
Правила можно задавать и раздельно:
<идентификатор>:: = <буква>
<идентификатор>:: = <идентификатор> <буква>
<идентификатор>:: = <идентификатор> <цифра>