从我的计算机语言课程开始已经有几年了,所以我忘记了BNF和EBNF的更精细的点,而且我旁边没有教科书。具体来说,我忘记了如何将EBNF转换为BNF。将EBNF转换为BNF
从我记得的事情来看,我知道其中的一个要点是将{ term }
转换为<term> | <many-terms>
。但我不记得其他规则。我试图在网上查看这些内容,但我只能找到指向任一作业问题的链接,或者关于使用大括号转换术语的小评论。我无法找到定义翻译的详尽规则列表。
从我的计算机语言课程开始已经有几年了,所以我忘记了BNF和EBNF的更精细的点,而且我旁边没有教科书。具体来说,我忘记了如何将EBNF转换为BNF。将EBNF转换为BNF
从我记得的事情来看,我知道其中的一个要点是将{ term }
转换为<term> | <many-terms>
。但我不记得其他规则。我试图在网上查看这些内容,但我只能找到指向任一作业问题的链接,或者关于使用大括号转换术语的小评论。我无法找到定义翻译的详尽规则列表。
请参看下面的链接,它包含了每一个需要转换的生产指令:
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'.
完美!这正是我需要的。有人我从来没有找到链接! – 2010-03-18 01:11:06
我现在在那个链接上有404 ...任何想法,如果有更新的版本的地方? – Steve 2012-01-30 04:26:00
唉,不是我的头顶。希望页面能够回来。 – 2012-01-30 18:00:59