The non-terminal-spec can either by a symbol, indicating a single name for this non-terminal, or a sequence of symbols, indicating that all of the symbols refer to these productions.
As a simple example of a grammar, this is the lambda calculus:
|(e (e e ...)|
|(c (v ... c e ...)|
|(v (lambda (x ...) e))|
with non-terminals e for the expression language, x for variables, c for the evaluation contexts and v for values.
|(v .... ; extend the previous `v' non-terminal|
|(x (variable-except lambda +)))|
extends lc-lang with two new alternatives for the v non-terminal, carries forward the e and c non-terminals, and replaces the x non-terminal with a new one (which happens to be equivalent to the one that would have been inherited).
The four-period ellipses indicates that the new language’s non-terminal has all of the alternatives from the original language’s non-terminal, as well as any new ones. If a non-terminal occurs in both the base language and the extension, the extension’s non-terminal replaces the originals. If a non-terminal only occurs in either the base language, then it is carried forward into the extension. And, of course, extend-language lets you add new non-terminals to the language.
If a language is has a group of multiple non-terminals defined together, extending any one of those non-terminals extends all of them.