【问题标题】:EBNF rule into BNFEBNF规则转化为BNF
【发布时间】:2014-10-01 04:17:47
【问题描述】:

您好,我在这个问题上遇到了很多麻烦,我遇到了很多网站,但发现这篇帖子 How to convert BNF to EBNF 非常有帮助,但我只是不知道从哪里开始这个例子。

<decimal_literal> --> (0|1|2|3|4|5|6|8|9){0|1|2|3|4|5|6|7|8|9|_}

在这条规则中,括号和花括号是元符号。它需要超过 1 条规则,并且可能需要引入 1 个或多个新的非终结符。

这是我正在使用的教科书http://umsl.edu/~mfrp9/misc/cpl.pdf 第 131 页显示了一个示例,但我无法将其应用于此问题。如果有人可以请逐步解释这个问题的解决方案,以便我可以学习它来解决类似的问题,非常感谢。

【问题讨论】:

  • 您交叉引用的问题是从 BNF 转换为 EBNF。您的问题标题说您正在尝试从 EBNF 转换为 BNF。你想做什么?如果目标是 BNF,那么 BNF 的哪个方言?如果目标是 EBNF,您的意思是标准 EBNF(如 ISO 14977:1996 中),还是 EBNF 的其他方言?
  • 是的,我希望将 EBNF 转换为 BNF,但被告知如果它可以以一种方式转换,那么它可以以另一种方式转换。我找不到任何关于 EBNF 到 BNF 的确切信息,所以我用那篇文章作为指南。是的标准 EBNF。
  • 可以,可以转换,但问题是“BNF的哪个方言”?我想答案是“在书中”。
  • 根据bnf-for-java.sourceforge.net/Dialects.html,我假设它是方言2

标签: bnf ebnf


【解决方案1】:

这看起来像是从书的 p131 翻译成 BNF 似的。

<decimal_literal> ⟶ <decimal_digit>
    | <decimal_literal> <decimal_digit_or_underscore>

<decimal_digit> ⟶ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<decimal_digit_or_underscore> ⟶ <decimal_digit> | _

【讨论】:

  • 我了解,但我们为什么要拆分?由于可以省略或重复的表达式可以通过花括号 { ... } 表示。
  • 如果你愿意,你可以按照自己的方式去做;这就是我会做的方式。您书中 p131 上的 BNF 没有显示使用 { … } 进行重复;那是一个EBNF符号。由于您要从 EBNF 转换为 BNF,因此您必须删除仅 EBNF 的结构,如 { … } 并转换为 BNF。
  • 嗨,谢谢乔纳森的帮助,我发布了另一个简单的问题,我想看看我的解决方案是否正确,如果你有第二个,请看一下。 stackoverflow.com/questions/26134894/bnf-to-standard-ebnf
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2020-02-05
  • 1970-01-01
相关资源
最近更新 更多