This is a brief idea for a style of BNF syntax that I have found to be very efficient and easy to understand in a few contexts.

There are just two sorts of expression built from simpler expressions:

{X/Y} comprises X's separated by Y's.

Where one might conventionally write:

 Z ::= X | Z Y X
One writes Z ::= {X/Y}. The main advantage is that the syntactic category need not be named.

The {X|Y} notation is conventional BNF.

These two meta constructs efficiently supplant several conventional BNF extensions.

The conventional [X] may be rendered {X|}.

A sequence of statements terminated by semicolons can be rendered: {<statement> ";"/}.

A C function invocation can be rendered: <fun> "(" { {<exp> / ","} |} ")" .

A sequence of zero or more zots may be rendered {/<zot>}.