EBNF는 기존 BNF에서 작성이 불편한 부분들을 개선하고 기능을 확장한 것이다. 그러나 기존의 BNF와 표현력의 차이는 존재하지 않는다.
[ ] (optional) : [ ] 는 옵셥을 의미한다. 아래의 예시를 살펴보자.
BNF) <if> -> if(<expr>)<statement> | if(<expr>)<statement> else<statement>
EBNF) <if> -> if(<expr>)<statement>[else <statement>]
else는 옵션이므로 [ ]를 이용해 나타낼 수 있다.
( ) : 두 개의 연산자 중 하나를 선택해야 하는 경우.
BNF) <term> -> <term> * <factor> | <term> / <factor>
EBNF) <term> (*|/) <factor>
{ } : 0번 이상의 반복.
BNF) <number> -> <number><digit> | <digit>
EBNF) <number> -> <digit>{<number>}
<digit>의 중복을 제거하고 표현할 수 있다. { }안의 구문은 안 나와도 되고, 1번 이상 반복되도 되기 때문이다.
