首先,这是一个家庭作业问题。我有一个想法,但我仍然无法得到正确的答案。我不是要求答案,我只是在寻求帮助来回答这个问题。
我目前正在尝试为该语言编写无上下文语法
a(iterated i times)db(iterated j times), for i and j>=0, and j = 2 * i.
所以基本上有两倍于b和a介于两者之间。例如:
d, adbb, aadbbbb, ……
这是关于我所拥有的,我没有太多...我理解这些CFG的概念我只是不确定这个问题的逻辑。我不确定我是否正朝着正确的方向前进......
S -> AdB
A -> EMPTY
A -> aAB
B -> DD
感谢。
答案 0 :(得分:1)
我想我会先说明你只需要2个语句来解决这个问题。我宁愿看到你的一些作品(即使是在错误的方向!)如果我不再给你的话。
修改强>
感谢您发布您所拥有的内容。这是一对思想练习,希望能让你朝着正确的方向前进:
为n>写一个表达 n b n 的语法。 0(ab,aabb,aaabbb,...)
维基百科关于CFG的文章如果你仍然陷入困境,会对此有所帮助。
为n>写一个表达 n db n 的语法。 0(adb,aadbb,aaadbbb,...)
当你得到最后一个时,你会看到一个微不足道的补充来达到你的语法。
答案 1 :(得分:1)
每当你有一种语言时,你可以像这样列出,其中每个字符串在以下字符串的子字符串中,写一个简单的递归语法相当简单。您需要一个规则来创建第一个(最短的)字符串,以及一个规则来从前一个字符串中生成每个更长的字符串。