【问题标题】:Converting EBNF to BNF将 EBNF 转换为 BNF
【发布时间】:2011-01-28 19:37:56
【问题描述】:

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

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

{ term }

进入

<term> | <many-terms>

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

【问题讨论】:

    标签: language-agnostic computer-science bnf ebnf recursive-descent


    【解决方案1】:

    参见this page?它包含每个需要转换的产品的说明:

    从 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'.

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-29
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多