How to rewrite EBNF into BNF

EBNF -> BNF
BNF -> EBNF
EBNF have 3 additional constructs:
- repetitions
- optional parts
- alternatives

Repetitions

Can be replaced with additional recursive rule

A := B, { C }, D ; (* repetition of C *)
can be replaced with
A0 := ;
A0 := C, A0; // supplementary rule, which express repetition through tail recursion
A1 := B, A0, D; (* final rule = A *)

I don't know the reason, why { } mean 0 to many repetitions instead of 1 to many.

Optional parts

A := B, [ C ], D ; (* C is optional *)
replaced with 2 rules
A1 := B, D ;
A1 := B, C, D ;

What if there N optional parts (and 2N variants of their presence)?
A := B, [ C ], [ D ], [ E ], [ F ], G ;
A0 := ;
A0 := C;
A1 := ;
A1 := D;
A2 := ;
A2 := E;
A3 := ;
A3 := F;
A4 := B, A0, A1, A2, A3, G; (* final rule = A *)

Alternatives

A := B | C;
replaced with N rules - one for each alternative branch:
A1 := B;
A1 := C;