BNF 中的支架和支撑用法?

Bracket and brace usage in BNF?

考虑以下几点:

函数参数列表是零个或多个参数的序列,参数之间用逗号分隔并用括号“(”和“)”括起来。

假设"parameter"的句法范畴已经定义,我要给出"function parameter list"的句法,可不可以这样写:

  <function parameter list> ::= ( [<parameter> { , <parameter>} ] )

作为 BNF? EBNF 是否接受嵌套在大括号中的括号的使用?

最初我的冲动是将 BNF 设为:

  <function parameter list> ::= ( <parameter> )
                             | ( <parameter> { , <parameter> } )
                             | ( )

我不确定如果不使用大括号,我还能如何编写这个 BNF。

我正在尝试从我的文本或网上获取有关在常规 BNF 中使用 brackets/braces 的信息,一些消息来源暗示你可以,但我的文本没有具体说明。对于这种情况,BNF 似乎需要某种类型的支架。我以为 BNF 不能使用方括号或大括号,现在我不确定了。

大括号和方括号是 EBNF 结构——E 代表扩展。 Simple BNF只是上下文无关文法,对于递归的东西没有额外的语法糖,所以你得用嵌套的递归规则写出来:

<function parameter list> ::= ( <param-list> ) | ( )
<param-list> ::= <param> | <param-list> , <param>