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>
考虑以下几点:
函数参数列表是零个或多个参数的序列,参数之间用逗号分隔并用括号“(”和“)”括起来。
假设"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>