【问题标题】:EBNF to BNF Conversion [duplicate]EBNF 到 BNF 转换 [重复]
【发布时间】:2010-01-25 01:44:16
【问题描述】:

我有一个家庭作业问题,我需要一些帮助。我需要将以下 EBNF 语句转换为 BNF

<S> -> <A>{b<A>}
<A> -> a[b]<A>

这是我目前想出的;

<S> -> <A> | <A><S> | b<A>
<A> -> a<A> | ab<A>

感觉不对,主要是因为它是 WAG。我的书中的例子(编程语言的概念,Sebesta)根本没有帮助我。因此,如果有人有任何见解,将不胜感激。谢谢!

【问题讨论】:

    标签: bnf ebnf


    【解决方案1】:

    第一个语法似乎有问题,或者至少是不必要的混乱。但请看这里,了解将 EBNF 转换为 BNF 的机械方法:

    http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html

    【讨论】:

      【解决方案2】:

      您对&lt;S&gt; 的转换并不完全正确:

      <S> -> <A> | <A><S> | b<A>
      

      因为可以递归地选择&lt;A&gt; 而没有原始EBNF 规则未定义的b(您只能递归&lt;A&gt;b

      解决方案可能是:

      (* S 是 A 的序列,可选地后跟 b 和 S 的序列。*)

      <S> -> <A>
             | <A> b <S>;
      

      (* A 由 'a' 组成,后跟一个可选的 'b',然后是另一个 A.*)

      <A> -> a <A>
             | a b <A>;
      

      这就是我喜欢 EBNF 的原因。它更容易理解和编写! :-)

      最终你会问自己需要什么。写下来。现在考虑可选组件并使用它们与所需组件的各种组合(当然以正确的顺序)。然后尽量减少(注意不要出错)。

      【讨论】:

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