【问题标题】:Specific conversion of EBNF into BNFEBNF具体转化为BNF
【发布时间】:2013-10-07 02:02:05
【问题描述】:
<A> ::= <B> x {<B> <D>} y <B>
<B> ::= <C> (w|z) <C> <D>
<C> := m [n] <D> <E> 
<D> := q | null
<E> := p | null

如何将此 EBNF 转换为 BNF?

【问题讨论】:

    标签: bnf ebnf


    【解决方案1】:

    不同的人对 EBNF 使用不同的语法,我不确定您使用的是哪一种。您在 EBNF (ISO/IEC 14977: 1996(E)) 中的语法如下所示:

    A = B, "x", {B, D}, "y", B;
    B = C, ("w" | "z"), C, D;
    C = "m", ["n"], D, E; 
    D = ["q"];
    E = ["p"];
    

    假设您使用null 作为空字符串。请注意,这可以进一步简化。

    必须添加一些产生式才能将其转换为 BNF:

    • { expr } 可以通过插入产生式P := empty | expr P 来替换,其中empty 表示空字符串。

    • [ expr ]可以通过插入P := empty | expr来替换。

    • 任何表达式 ( expr ) 都可以通过添加新产生式来替换 P := expr

    所以是这样的:

    A -> B x F y B
    F -> empty | B D F
    B -> C G C D
    G -> w | z
    C -> m H D E
    H -> empty | n
    D -> q | empty
    E -> p | empty
    

    再次假设null 是指空字符串。

    【讨论】:

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