请考虑以下事项:
函数参数列表是由逗号分隔的零个或多个参数的序列,并用括号括起来,"("和")"
如果我想提供"函数参数列表"的语法假设"参数"的句法类别已定义,我可以写:
<function parameter list> ::= ( [<parameter> { , <parameter>} ] )
作为BNF?括号的用法是否嵌套在EBNF可用的大括号中?
最初我的冲动是将BNF作为:
<function parameter list> ::= ( <parameter> )
| ( <parameter> { , <parameter> } )
| ( )
我不确定如何在没有大括号的情况下写这个BNF。
我试图从我的文字或网上获取有关在常规BNF中使用括号/括号的信息,而某些来源暗示您可以,但我的文字并未完全指定。在这种情况下,BNF似乎需要某种类型的支撑。我认为BNF无法使用支架或支架,现在我不确定。
答案 0 :(得分:1)
大括号和括号是EBNF结构 - E代表扩展。简单的BNF只是一个无上下文的语法,没有额外的语法糖用于递归的东西,所以你必须用嵌套的递归规则写出来:
<function parameter list> ::= ( <param-list> ) | ( )
<param-list> ::= <param> | <param-list> , <param>