需要帮助构建语法?

时间:2011-09-14 03:26:53

标签: grammar context-free-grammar

L = ((a^n)(b^n+m)(a^m)) | n, m = 0, 1, 2...)

我不熟悉上下文语法并了解基础知识,但我一直在努力解决这个问题。

对于初学者,我不知道代码的这一部分意味着什么:

| n, m = 0, 1, 2...)

其次,如何使用不同的指数来获得相同的变量?我觉得我没有得到完整的概念。

编辑:我还需要能够构建规则来构建这个语法。

编辑:添加标记

2 个答案:

答案 0 :(得分:4)

首先,用文字描述语言。这种语言有一个特别简洁的描述:它是以a开头的所有字符串的语言,后跟b,后跟a,其中b的数量等于a的总数(在两边)。

接下来,我们将尝试提出一个规则来获取语言中的字符串并生成新字符串。给定一个字符串,您可以通过在前面添加a和在中间添加a,或者在后面添加a和在中间添加b来获得下一个最长的字符串。空字符串也是这种语言(n = m = 0),所以这可以作为归纳的基础。如果我们仔细观察一下,我们可以得到更好的规则:我们可以将任何字符串a ^ n b ^ n + m a ^ m分成两个字符串(a ^ n b ^ n)(a ^ m b ^ m)。由于连接很容易用语法完成,并且使用语法很容易做到,所以这就是它的全部内容。

我得到规则......

  S := LR
  L := empty | aLb
  R := empty | bRa

获得例如aabbba,...

  S := LR := aLbR := aaLbbR := aabbR := aabbbRa := aabbba

如果这是作业,那么将其标记为好。如果这是自学,希望你会带走以下技巧:用英语描述语言;试图找出简单的基础案例;尝试从已经在语言中的字符串中识别形成更复杂的字符串(即更长的字符串)的规则;重新制定规则和/或注意技巧,以便您可以根据语法中容易的事情陈述规则;写下语法并在几个字符串上检查。

语法中有什么容易做的?语言联盟,语言连接,甚至符号对的匹配(例如a ^ k b ^ k),回文等等。

答案 1 :(得分:1)

这只是对n和m值的限制的数学符号。这意味着对于由(a^n)*(b^n+m)*a^m形式组成的字符串,“n”和“m”是两个独立的值(尽管它们可能相等),而0,1,2 ......只表示它们是任意的整数值大于或等于零。