EBNF는 BNF의 확장형 표기법으로, (BNF는 문맥 자유 문법의 한 종류로 문맥 자유 문법을 표현하는 가장 일반적이고 많이 사용되는 표기법이라고 생각하시면 됩니다), 파싱이나 컴파일러, 단순 구문 분석 등에 사용됩니다.

기호 정의
=, ::= : 대입한다. 정의한다. 수학의 :=랑 비슷한 개념이다.
| : C언어의 ||연산과 같은 개념이다. 반복자.
, : 연결자
; : 종결자
{ ~ } : 반복. regex의 {,}, *, +, ?를 생각하시면 됩니다.
[ ~ ] : 옵션
(* ~ *) : 주석
? ~ ? : 특수 반복
" ~ ", ' ~ ' : 터미널.
( ~ ) : 그룹핑.

- : 전자와 후자가 달라야한다.

기호는 보통 많이 쓰이는 것이지 무조건 쓸 필요는 없습니다. 정해진게 아니거든요

간단한 예제 분석
-1
exp = '"', { char, - '"' }, '"' ;
위 구문은 C언어의 문자열을 분석하는 표현이다. '"'는 문자 "를 나타내고, char은 모든 문자와 매칭되는 것이다. { char - '"' }는 '모든 문자중 "를 제외한 문자'의 모든 것과 일치된다. 즉 "A"나 "AB", "ABC"와 일치되는 것이다. 단, "A"A"라고 표현할 시 "A"가 exp로 대입된다.

-2
type ::= 'int' | 'char' | 'void' | type, ('*' | '&');

seq = type, { white space }+, { string }, "(", { type, { string }, - (')' | ',') }, ")" ;

type는 int형과 char형, void형을 정의하고 있다. type, ('*' | '&')는 type을 재귀하고 있다. 즉 type을 다시 넣는 것으로 해석하면된다. type은 int*나 char&&, int*&와 같은 형식으로 정의할 수 있다. seq의 경우 C언어의 함수 선언을 나타낸 것이다. { ~ }+는 ~이 한 번이상 일치된다는 뜻 이다. seq로 표현가능한 식을 나타내면 다음과 같다. void plus(int* x, int *y), int GetLocalAddr(), int strlen(char* dest)

-3
exp = term, { ('+' | '-'), (term | exp) } ;

term = factor, { ('*' | '/'), factor } ;

factor = '(', exp, ')' | number ;
이 표현식은 간단한 계산식 표현식이다. exp는 term또는 term +|- term을 가질 수 있다. 또는 term +|- term +|- term도 가질수 있을 것이다. 이것에 대하여 잘 생각해보면 식이 점점 오른쪽으로 길어진다는 것을 알 수 있다. 이를 우 재귀라한다.(죄 재귀 문법에서, 생성식대신, 논터미널은 중간 생성식을 통해서 좌 재귀식을 유도한다.) 
exp는 term을 처음으로 호출하고, term은 factor을 처음으로 호출하며, factor은 ( exp )또는 숫자를 인자로 가진다. 거꾸로 말하면 아주 간단한 식에서라도 factor문이 가장먼저, 그 다음 term이, 그 다음 exp가 차례대로 실행 된다라는 말이다. exp와 term을 분리하여 놓은 가장 결정적인 이유는 연산 순서의 따름이다.(더하기나 빼기가 곱셈이나 나눗셈보다 먼저 계산될 수 없다.) 연산순서를 한 문장을 두 문장으로 분리 함으로써 가능하다는 것을 알려준다.
factor은 exp를 괄호안에 넣을 수 있다는 것을 알려준다.
exp로 나타낼 수 있는 식은 다음과 같다. 5+(4*(6-2)/3-6)*(9-3/(6+3))

참고할만한 EBNF 예제