syntax - BNF 中括号和大括号的用法?

标签 syntax language-agnostic grammar bnf ebnf

考虑以下因素:

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

如果我想给出“函数参数列表”的语法,假设“参数”的语法类别已经定义,我可以这样写:

  <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/

相关文章:

javascript - 无法访问全局变量(语法错误?)

algorithm - "one or more"带 LL 解析器

grammar - 0 和 1 数量不等的线性文法

c++ - 帮助 boost 语法

language-agnostic - 游戏开发和业务开发有什么区别?

language-agnostic - 处理对应该唯一值几乎不可能的冲突

php - Mysql 语法错误...或者是 PHP?

c++ - 晦涩的 C++ 语法

Java - 语法让我难过

language-agnostic - 关于编程语言设计的好资源?