上下文无关语法设计
Context Free Grammar Design
我正在学习上下文无关语法,到目前为止我一直在理解它们,但这个问题有点让我头晕。
我有以下规则:
S --> aSb | bB | epsilon
B --> bbB | bB | epsilon
而且我几乎可以肯定它们是不正确的。我知道我会怎么做 i <= j 而不是实际的语言,但是做 j <= 3i 的想法对我来说真的很难理解,我真的不明白我应该如何在 CFG 中表示它。
我在这里阅读了一些关于设计 CFG 的问题和主题,但它们并没有真正帮助我确定答案的策略。
在此先感谢您的帮助!
对于字符串中的任何 a
,您必须在字符串中包含 1、2 或 3 个 b
。
b
必须跟在 a
之后。
您可以有零个 a
s。
S = A S B | e
A = a
B = b | bb | bbb
零 a
s 表示没有 b
s。
一个 a
允许 1、2 或 3 b
秒。
通过 S
的递归,你可以得到任意数量的 a
。
你的解法确实不对,因为不满足条件j <= 3i。
比 Björn 的解决方案更接近您的意图,并且使用更少的非终端:
S -> aSb | aSbb | aSbbb | epsilon
我正在学习上下文无关语法,到目前为止我一直在理解它们,但这个问题有点让我头晕。
我有以下规则:
S --> aSb | bB | epsilon
B --> bbB | bB | epsilon
而且我几乎可以肯定它们是不正确的。我知道我会怎么做 i <= j 而不是实际的语言,但是做 j <= 3i 的想法对我来说真的很难理解,我真的不明白我应该如何在 CFG 中表示它。
我在这里阅读了一些关于设计 CFG 的问题和主题,但它们并没有真正帮助我确定答案的策略。
在此先感谢您的帮助!
对于字符串中的任何 a
,您必须在字符串中包含 1、2 或 3 个 b
。
b
必须跟在 a
之后。
您可以有零个 a
s。
S = A S B | e
A = a
B = b | bb | bbb
零 a
s 表示没有 b
s。
一个 a
允许 1、2 或 3 b
秒。
通过 S
的递归,你可以得到任意数量的 a
。
你的解法确实不对,因为不满足条件j <= 3i。
比 Björn 的解决方案更接近您的意图,并且使用更少的非终端:
S -> aSb | aSbb | aSbbb | epsilon