【发布时间】:2015-04-20 22:32:49
【问题描述】:
看下面的递归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 }* 不好,因为括号需要平衡。
【问题讨论】:
-
有点猜想但是:x = (, ab)* a
-
顺便说一句:对于规则 (3):x = {ab 我不确定它是否好。
-
@AdamOcsvari ,您没有括号。并且不涉及逗号。
-
@helpYou:没错!这更简单:x = ab* a
-
他想要像
{(ab{)*a(})*}或({ab)*{a}(})*这样的东西,但有更多的控制权 - 在双方都有相同的号码作为*的替代品。 (开括号的数量应该等于闭括号的数量)
标签: recursion matching parentheses bnf non-recursive