我想把EBNF转换成BNF

  • 本文关键字:BNF 转换 EBNF bnf ebnf
  • 更新时间 :
  • 英文 :


EBNF

<A> ::= <B><C> '('[<D>{,<D>}]')';

当我解决这个问题时,结果是这样的:

BNF-

<A>::=<B><C>(); |<B><C> (<D>|<A><D>);

答案正确吗?

它包含每个需要转换的产品的说明:

从EBNF到BNF

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

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

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

    X = $epsilon$ | E. (We can convert X = A [ E ] B. to X = A
    E B | A B.) 
    
  • 将每组(E)转换为新的非终端X添加X = E.

  • 我们甚至可以通过几个具有相同非终端的产品。

    X = E | E'. becomes X = E. X
    = E'.
    

请参阅以下链接:

  • 链接1
  • 链接2

最新更新