考虑以下因素:
函数参数列表是由逗号分隔并用括号“(”和“)”括起来的零个或多个参数的序列。
如果我想给出“函数参数列表”的语法,假设“参数”的语法类别已经定义,我可以这样写:
<function parameter list> ::= ( [<parameter> { , <parameter>} ] )
作为 BNF? EBNF 可以接受使用大括号中嵌套的括号吗?
最初我的冲动是将 BNF 给出为:
<function parameter list> ::= ( <parameter> )
| ( <parameter> { , <parameter> } )
| ( )
我不确定如果没有大括号我该如何编写这个 BNF。
我正在尝试从我的文本或在线获取有关在常规 BNF 中使用方括号/大括号的信息,并且某些来源暗示您可以,但我的文本没有准确指定。 BNF 似乎需要某种类型的支撑来应对这种情况。我以为 BNF 不能使用方括号或大括号,但现在我不确定。
最佳答案
大括号和中括号是 EBNF 结构——E 代表扩展。简单的BNF只是一个上下文无关的语法,没有额外的递归语法糖,所以你必须用嵌套的递归规则来写它:
<function parameter list> ::= ( <param-list> ) | ( )
<param-list> ::= <param> | <param-list> , <param>
关于syntax - BNF 中括号和大括号的用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28978410/