我正在学习上下文无关文法,到目前为止,我一直都在理解它们,但是这个问题有点使我头昏脑胀。
我有以下规则:
S --> aSb | bB | epsilon
B --> bbB | bB | epsilon
我几乎可以肯定它们是不正确的。我知道我将只做i <= j而不是实际的语言,但是做j <= 3i的想法对我来说真的很难理解,我也不真正理解我应该如何在CFG中表示。 / p>
我在这里阅读了一些有关CFG设计的问题和线索,但是它们并没有真正帮助我确定答案的策略。
在此先感谢您的帮助!
答案 0 :(得分:1)
对于字符串中的任何a
,您必须在该字符串中包含1个,2个或3个b
。
b
必须遵循a
。
您可以有零个a
。
S = A S B | e
A = a
B = b | bb | bbb
零a
表示没有b
。
一个a
允许1、2或3个b
。
通过S
进行递归,您可以拥有任意数量的a
。
答案 1 :(得分:0)
您的解决方案确实是不正确的,因为不遵守条件j <= 3i。
比Björn的解决方案更接近您的意图,并且使用的非终结符更少:
S -> aSb | aSbb | aSbbb | epsilon