这个问题是为包含更多A字符的字符串而不是B字符的所有字符串开发无上下文语法。
我想不出一个逻辑解决方案。有没有一种方法来解决这样的问题,可以帮助我更好地解决这样的问题?有人能建议一种合乎逻辑的分析语法问题的方法吗?
这个问题是为包含更多A字符的字符串而不是B字符的所有字符串开发无上下文语法。
我想不出一个逻辑解决方案。有没有一种方法来解决这样的问题,可以帮助我更好地解决这样的问题?有人能建议一种合乎逻辑的分析语法问题的方法吗?
以下文法生成所有在{a,b}
上的字符串,这些字符串中 a
的数量要多于 b
的数量。我用 eps
来表示空字符串。
S -> Aa | RS | SRA
A -> Aa | eps
R -> RR | aRb | bRa | eps
很明显,它总是生成比'b'更多的'a'。不太明显的是,它生成所有可能的字符串,其中有比'b'更多的'a',并且平衡的字符串使用产生式R -> RR | aRb | bRa | eps可以很容易地生成,而语言a* (即具有零个或多个'a'的字符串)可以通过产生式A -> Aa生成。aaabbbaabb
的字符串。 - blazsS → TAT
T → ATb | bTA | TT | ɛ
A → aA | a
T可以生成任何满足#a >= #b(包括空字符串)的字符串。S确保在任何位置上至少有一个'a'比'b'多。
我能想到的另一种简单解决方案是:
S -> XAX|a
A -> aS|Sa
X -> aXb|bXa|e
其中 e 表示空集。
另一种可能更简单的解决方案:
S->A|AAB|BAA|e
A->AA | a
B->AB | BA | b
aabbaba
是一个有效的字符串吗? - blazs