上下文免费语言

时间:2013-11-19 01:14:05

标签: context-free-grammar

我的计算机科学课让我们做了无上下文语法。 我想我明白他们是如何工作但我不确定。 有人能告诉我,如果我正确地做这些或者我是否遗漏了这些内容? 我没有必要直接回答问题,但我想知道我是否正确地做了这些或者我是否需要考虑其他问题。

{0^2n 1^3n | n in the set of natural numbers}
 my answer: S-> 00S111 | Lambda

对于这个我假设这将递归地将00和111添加到字符串中并且如果它没有添加S那么它将添加lambda,它将关闭字符串,只留下0和1的

另一个是

{0^n 1^n | N in the set of natural numbers} 
my answer: S -> 0S1 | A
           A -> 0S1 | lambda

再次lambda会关闭字符串。

这些是正确的还是我错过了什么?

编辑:问题1应该有1 ^ 3n而不是1 ^ n

1 个答案:

答案 0 :(得分:0)

这应该是评论,但我需要更多空间......

对于第二个例子(如评论中所述),你的语法不起作用。

您的语法将创建一个n 0s后跟n 1s的字符串。没有别的,没有别的。

您需要一些生产,允许您在当前生产之后添加值。如果我要写0^n 1^n 2^x,我会使用

  S -> AB 
  A -> 0A1 | lambda 
  B -> 2B | lambda

这有帮助吗?

(*)实际上之后或之前只是相对的术语,但我们通常按顺序阅读(右边的意思是后来的)。