我的计算机语言课已经过去几年了,所以我已经忘记了 BNF 和 EBNF 的要点,而且我身边也没有教科书。具体来说,我忘记了如何将 EBNF 转换为 BNF。
据我所知,我知道要点之一是转换
{ term }
into
<term> | <many-terms>
但其他的规则我不记得了。我试图在网上查找此内容,但我只能找到家庭作业问题的链接,或有关用大括号转换术语的小评论。我找不到定义翻译的详尽规则列表。
See this page http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html.???? https://archive.vn/nsP4r It contains instructions for each production that needs to be converted:
从 EBNF 到 BNF
对于构建解析器(尤其是自下而上),BNF 语法通常比 EBNF 更好。但将 EBNF 语法转换为 BNF 很容易:
-
转换每次重复{ E }
到一个新鲜的非终端X
and add
X = ε | X E.
-
转换每个选项[ E ]
到一个新鲜的非终端X
and add
X = ε | E.
(我们可以转换X = A [ E ] B.
to X = A E B | A B.
)
-
转换每个组( E )
到一个新鲜的非终端X
and add
X = E.
-
我们甚至可以通过使用相同的非终结符进行多个产生式来消除替代方案。
X = E | E'.
变成X = E. X = E'.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)