6

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

从我记得的事情来看,我知道其中的一个要点是将{ term }转换为<term> | <many-terms>。但我不记得其他规则。我试图在网上查看这些内容,但我只能找到指向任一作业问题的链接,或者关于使用大括号转换术语的小评论。我无法找到定义翻译的详尽规则列表。

回答

16

请参看下面的链接,它包含了每一个需要转换的生产指令:

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

建筑解析器(尤其是自下而上)一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'.

+0

完美!这正是我需要的。有人我从来没有找到链接! – 2010-03-18 01:11:06

+1

我现在在那个链接上有404 ...任何想法,如果有更新的版本的地方? – Steve 2012-01-30 04:26:00

+0

唉,不是我的头顶。希望页面能够回来。 – 2012-01-30 18:00:59