看下面的递归 BNF 规则
(1) X = Xa | b
这会产生类似的句子
X = b
X = ba
X = baa
X = baaa
...
这可以写成
(2) X = b a*
右手边不是递归的
现在看看下面的递归 BNF 规则
(3) X = { X } | b
这会产生类似的句子
X = b
X = {b}
X = {{b}}
X = {{{b}}}
...
是否有某种方法可以以非递归方式重写规则 (3),类似于我们将规则 (1) 重写为规则 (2) 时所做的那样。
观察到 X = {* b }* 不好,因为括号需要平衡。