【发布时间】:2019-04-12 15:02:39
【问题描述】:
我有以下语法,
S -> SbS -> aaSbS -> b
此语法中的典型推导是 S => Sb => [aaSb]b => [aa[b]b]b => aabbb 对应于n = 1 S => Sb => [aaSb]b => [aa[aaSb]b]b => [aa[aabb]b]b => aaaabbbb 对应于n = 2
编辑:
所以我声称这个语法会生成语言 L = {a^(2n)b^(n+2) : n >= 1}
我很确定我的 a 是 a^(2n) 因为在 S 之前有两个 a ,但是 b 呢?这里没有 lambda 所以我的 n 来自 n >= 1?.
编辑:b^(n+1) 和 b^(2n+1) 都是错误的假设,因为如果 n = 3,语法可以导出字符串 aaaaaabbbbb。
我将我的 b 修改为 b^(n+2)。
这样 L 就变成了 L = {a^(2n)b^(n+2) : n >= 1}
【问题讨论】:
-
也许这对我来说是新的,但这是一个软件编程问题吗?
-
不是真的,这更像是计算机科学问题。
-
语法可以产生
aaaaaabbbbb,它与您提议的形式不匹配。 (我很确定 CFG 不能生成具有指数数量符号的语言,尽管我无法在此评论中证明这一点。) -
你是对的,如果
n = 3只有当 b 是b^(n+2)时,语法才会产生aaaaaabbbbb。所以我对b^(2n)或b^(2n+1)的假设是错误的。 -
Production 1 表示可以在末尾添加任意数量的
bs。这使得平等关系不太可能。
标签: context-free-grammar regular-language formal-languages context-free-language