Viv*_*ath 8 language-agnostic computer-science recursive-descent bnf ebnf
我的计算机语言课已经过了几年,所以我忘记了BNF和EBNF的细节,而且我旁边没有教科书.具体来说,我忘记了如何将EBNF转换为BNF.
从我记忆中的一点点,我知道其中一个要点就是转换{ term }
成<term> | <many-terms>
.但我不记得其他规则.我试着在网上看一下,但是我只能找到关于家庭作业问题的链接,或者关于用花括号转换术语的小评论.我找不到定义翻译的详尽规则列表.
500*_*ror 20
请参阅以下链接,其中包含每个需要转换的生产的说明:
http://lampwww.epfl.ch/teaching/archive/compilation-ssc/2000/part4/parsing/node3.html
对于构建解析器(尤其是自下而上),BNF语法通常比EBNF更好.但是将EBNF语法转换为BNF很容易:
将每个重复转换
{ E }
为新的非终端X
并添加Run Code Online (Sandbox Code Playgroud)X = ? | X E.
将每个选项转换
[ E ]
为新的非终端X
并添加Run Code Online (Sandbox Code Playgroud)X = ? | E.
(我们可以转换
X = A [ E ] B.
为X = A E B | A B.
)将每个组转换
( E )
为新的非终端X
并添加Run Code Online (Sandbox Code Playgroud)X = E.
我们甚至可以通过使用相同的非终端的多个产品来取消替代品.
X = E | E'.
变X = E. X = E'.