设计上下文免费语法[HW]

时间:2011-03-07 00:13:38

标签: context-free-grammar

我一直在为此做大约5个小时的家庭作业,我希望你们中的一些人能够提供帮助,因为CFG是CS的重要组成部分。

我真正的麻烦在于C部分。

为以下每种语言设计CFG:

一个。 {(a ^ i)(b ^ j)(c ^ k)} WHERE(i!= j)AND i,j,k> = 0)

我想出了:

Start-> aAB | AbB
A-> epsilon | aA
B-> epsilon | C | bB
C-> epsilon | cC

这似乎适用于bccc,abbcc,aabbb,cc所以我觉得我在这里很好。

B中。 {(a ^ i)(b ^ j)(c ^ k)} WHERE(i!= k)AND i,j,k> = 0)

Start-> aABC | ABcC
A-> epsilon | aA
B-> epsilon | bB
C-> epsilon | cC

这适用于bc,bbcc,ab,abb,aac所以当i!= k

时所有人都很好看

℃。 {(a ^ i)(b ^ j)(c ^ k)} WHERE(i!= j OR i!= k)AND i,j,k> = 0)

Start-> aABC | AbB | ABcC
A-> epsilon | aA
B-> epsilon | bB | C
C-> epsilon | cC

我不认为C部分是正确的,但我相信A和B是正确的。任何人都能告诉我,无论我是对还是错?我相信,因为在最后一种情况下我只是做一个OR,因为我的A,B,C变量几乎相同,我可以通过组合来逃避。它看起来像bc作品,acc作品和许多其他作品,但我觉得我不应该只是简单地结合起始状态。

任何人都知道我是对还是关闭或有任何提示?

2 个答案:

答案 0 :(得分:1)

你的第一个语法匹配abc(通过开始 - > AbB - > abB - > abC - > abc),所以它不是正确的语法。

因此,您需要确保以相同的数量创建ab(然后为其中一个创建更多)。

同样的abc也会与您的第二条规则相匹配,也不应该被允许。

答案 1 :(得分:1)

请记住,当您测试语法时,请务必使用应该被拒绝的字符串进行测试(请参阅@ Paulo的答案,了解一些当前失败的答案)。要解决前两个问题,请编写一个代表A^i B^j的语法i != j;为任意数量的c添加一个语法到第1部分的末尾,并将该语法添加到第2部分的中间。对于第3部分,请记住可以很容易地写出两个语法的并集作为一种语法。