Мова та метамова
<вираз> ::= <первинне> '+' <первинне> |
<первинне> '-' <первинне>
можна замінити на правило
<вираз> ::= <первинне> ('+' | '-') <первинне>
Заміною двох правил вигляду
N ::= X Z Y
N ::= X Y
на правило N ::= X [ Z ] Y також утворюється еквівалентна БНФ. Наприклад, замість правил
<вираз> ::= <первинне> | <первинне> ('+'| '-') <первинне>
можна вжити правило
<вираз> ::= <первинне> [ ('+'| '-') <первинне> ]
або замість правил
<оператори-розгалуження> ::=
if <умова> then <оператор> else <оператор> |
if <умова> then <оператор>
– правило
<оператори-розгалуження> ::=
if <умова> then <оператор> [ else <оператор> ]
Іноді буває зручно позбутися якогось поняття, замінивши його нетермінал відповідним метавиразом, наприклад, замість нетермінала <первинне> з прикладу 10.2 записати метавиразом <стала> | <ім'я> або навіть '1' | '2' | 'x' | 'y' | 'z'. Таким чином, сукупність БНФ із прикладу 10.2 еквівалентна сукупності
<оператор присвоювання> ::=
<ім'я> ':=' ('1' | '2' | <ім'я>) [ ('+'| '-') ('1' | '2' | <ім'я>) ]
<ім'я> ::= 'x' | 'y' | 'z'
Зміст метасимволів "{", "}" означимо за допомогою такого прикладу.
Приклад 3. Ім'я, або ідентифікатор, у мовах програмування – це послідовність букв і цифр, що починається з букви. Нехай буквами є лише A, B, C, цифрами – 0 і 1. Ідентифікаторами в цьому алфавіті є, наприклад, A, B1, BC, C1CAAB0 тощо. Означимо сукупність БНФ, що задає їх синтаксис.