BNF的支架和支架使用?

时间:2015-03-11 04:09:43

标签: syntax language-agnostic grammar bnf ebnf

请考虑以下事项:

函数参数列表是由逗号分隔的零个或多个参数的序列,并用括号括起来,"("和")"

如果我想提供"函数参数列表"的语法假设"参数"的句法类别已定义,我可以写:

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

作为BNF?括号的用法是否嵌套在EBNF可用的大括号中?

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

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

我不确定如何在没有大括号的情况下写这个BNF。

我试图从我的文字或网上获取有关在常规BNF中使用括号/括号的信息,而某些来源暗示您可以,但我的文字并未完全指定。在这种情况下,BNF似乎需要某种类型的支撑。我认为BNF无法使用支架或支架,现在我不确定。

1 个答案:

答案 0 :(得分:1)

大括号和括号是EBNF结构 - E代表扩展。简单的BNF只是一个无上下文的语法,没有额外的语法糖用于递归的东西,所以你必须用嵌套的递归规则写出来:

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