L = ((a^n)(b^n+m)(a^m)) | n, m = 0, 1, 2...)
我不熟悉上下文语法并了解基础知识,但我一直在努力解决这个问题。
对于初学者,我不知道代码的这一部分意味着什么:
| n, m = 0, 1, 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 ......只表示它们是任意的整数值大于或等于零。