14

我的计算机语言课已经有几年了,所以我已经忘记了 BNF 和 EBNF 的优点,而且我身边没有教科书。具体来说,我忘记了如何将 EBNF 转换为 BNF。

根据我的记忆,我知道其中一个要点是转换

{ term }

进入

<term> | <many-terms>

但我不记得其他规则。我试图在网上查找这个,但我只能找到指向作业问题的链接,或者关于用花括号转换术语的小评论。我找不到定义翻译的详尽规则列表。

4

2 回答 2

26

请参阅此页面它包含需要转换的每个产品的说明:

从 EBNF 到 BNF


对于构建解析器(尤其是自下而上),BNF 语法通常比 EBNF 更好。但是将 EBNF 语法转换为 BNF 很容易:

  • 将每个重复转换{ E }为新的非终结符X并添加

    X = ε | X E.
    
  • 将每个选项转换[ E ]为新的非终端X并添加

    X = ε | E.
    

    (我们可以转换X = A [ E ] B.X = A E B | A B.

  • 将每个组转换( E )为新的非终端X并添加

    X = E.
    
  • 我们甚至可以通过使用相同的非终端的多个产品来取消替代方案。

    X = E | E'.变成X = E. X = E'.

于 2010-03-17T23:27:10.177 回答
1

请注意:在 ISO 标准中列出的 EBNF 还包括句法规则的例外情况,这些例外情况没有 BNF 等效项。500 - Internal Server Error 给出的转换仅适用于与 RBNF/ABNF 重叠的部分 EBNF。

于 2019-08-20T12:46:11.773 回答